Java 如何制作Vista';s叙述者将我的Swing组件读回给我?

Java 如何制作Vista';s叙述者将我的Swing组件读回给我?,java,windows,windows-vista,accessibility,narrator,Java,Windows,Windows Vista,Accessibility,Narrator,我正在尝试为Swing实现一个非常,非常简单的可访问性测试,这样我就可以了解为我们已经建立的Swing应用程序提供可访问性支持的工作量有多大 我有一个最简单的Swing程序,我正在使用WindowsVista中的“讲述者”来尝试屏幕读取它的GUI public class ReadableFrame extends JFrame { private ReadableFrame() { super(); setTitle( "Banjollity'

我正在尝试为Swing实现一个非常,非常简单的可访问性测试,这样我就可以了解为我们已经建立的Swing应用程序提供可访问性支持的工作量有多大

我有一个最简单的Swing程序,我正在使用WindowsVista中的“讲述者”来尝试屏幕读取它的GUI

public class ReadableFrame extends JFrame {

     private ReadableFrame() {
         super();

         setTitle( "Banjollity's Window" );
         setSize( 640, 580 );
         setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );

         JButton button = new JButton( "Hello World" );

         getContentPane().setLayout( new FlowLayout() );
         getContentPane().add( button );

         setVisible( true );
     }

    /**
     * @param args
     */
    public static void main( String[] args ) {
        new ReadableFrame();
    }
}
叙述者可以阅读标题,但不能阅读其他内容。我得到“Banjolly的窗口,不包含其他已知控件”。如果我用AWT按钮替换Swing JButton,如下所示:

Button button = new Button( "Hello World" );
…然后它正常工作,我得到“Banjolly的窗口,关注Hello World按钮,包含Hello World按钮”

我已尝试将安装到JRE/lib/ext(我强烈怀疑这是否正常工作,因为我的程序拒绝启动我的应用程序,直到我将DLL放入Windows/System32),但没有成功


有人能帮忙吗,或者分享一些建议吗?

正如您对按钮的发现所显示的那样,如果讲述人愿意阅读本机Windows应用程序上的标签,那么您也许可以使用重型组件,以便操作系统意识到它们,反过来讲述人会阅读它们。

这似乎是讲述人的一些问题。如果我与支持Java访问桥的VM一起使用,那么它可以很好地读取屏幕上的每个组件。

如果没有,Narator是一个糟糕的屏幕阅读器。您需要安装java访问桥,然后使用一次运行40分钟作为演示的java访问桥或一个也支持java的免费屏幕阅读器。

不幸的是,您的swing组件需要实现该接口,一旦完成,讲述者可以发现组件并读取其内容。如果没有这些,它就无法发现控件。

@kd304恐怕我需要它与Swing一起工作。我们已经建立了一个Swing应用程序,希望为其添加可访问性。如果您使用Swing,则不排除AWT组件,除非您不喜欢本机外观。至少对于标签,你可以试试。NVDA的一个非常好的功能是,它支持一种模式,即语音文本显示在浮动窗口中,因此在为其开发时,你不必听令人毛骨悚然的计算机声音。