我正在尝试为Swing实现一个非常非常简单的可访问性testing,以便我们能够掌握将要为我们已经build立的Swing应用程序提供可访问性支持的工作量。
我有最简单的Swing程序,我在Windows Vista中使用讲述人来尝试屏幕阅读其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的窗口,不包含其他已知的控件 ”。 如果我用这样的AWTbutton来replaceSwing JButton:
Button button = new Button( "Hello World" );
…然后它正常工作,我得到“ Banjollity的窗口,专注于Hello Worldbutton,包含Hello Worldbutton ”。
我已经尝试安装到JRE / lib / ext的Java Access Bridge (我强烈怀疑这是工作正常,因为我的程序拒绝启动我的应用程序,直到我把DLL放入Windows / System32),但无济于事。
任何人都可以帮忙,或者分享一些build议吗?
你不,Narator是一个不好的屏幕阅读器。 您需要安装java访问桥,然后使用可一次运行40分钟的jaws作为演示程序,或者使用NVDA ,它也是支持Java的免费屏幕阅读器。
正如你的发现与按钮显示,如果讲述人愿意阅读本机Windows应用程序的标签,那么你可能可以使用重量级的组件,使操作系统知道他们,然后讲述人将读取它们。
这似乎是叙述者的一些问题。 如果我在启用了Java Access Bridge的虚拟机上使用JAWS ,那么它会很好地读取屏幕上的每个组件。
不幸的是,您的swing组件需要实现IAccessible接口,一旦完成,Narrator可以发现组件并阅读其内容。 没有这个,就没有办法去发现控制。