如何让Vista的讲述人将我的Swing组件读回给我?

时间:2009-06-25 12:58:34

标签: java windows windows-vista accessibility narrator

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

我有最简单的Swing程序,我在Windows Vista中使用Narrator来尝试屏幕阅读其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();
    }
}

讲述者可以阅读标题,但没有别的。我得到“ Banjollity的窗口,不包含其他已知的控件”。如果我用这样的AWT按钮替换Swing JButton:

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

...然后它正常工作,我得到“ Banjollity的窗口,专注于Hello World按钮,包含Hello World按钮”。

我已经尝试将Java Access Bridge安装到JRE / lib / ext(我强烈怀疑这是正常的,因为我的程序拒绝启动我的应用程序,直到我把DLL放在Windows / System32中)但是没有用。

有人可以提供帮助,还是可以分享一些建议?

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

正如您对Button的调查结果显示,讲述者是否愿意阅读本机Windows应用程序上的标签,那么您可能会使用重量级组件,以便操作系统了解它们,然后讲述者会阅读它们。

答案 2 :(得分:0)

这似乎是讲述者的一些问题。如果我在支持Java Access Bridge的VM上使用JAWS,那么它就可以很好地读取屏幕上的每个组件。

答案 3 :(得分:0)

不幸的是,您的swing组件需要实现IAccessible界面,一旦完成,Narrator就可以发现组件并阅读其内容。没有它,它就无法发现控制。