如何让 Vista 的讲述人向我朗读我的 Swing 组件?
Posted
技术标签:
【中文标题】如何让 Vista 的讲述人向我朗读我的 Swing 组件?【英文标题】:How do I make Vista's Narrator read my Swing components back to me? 【发布时间】:2010-11-05 20:06:09 【问题描述】:我正在尝试为 Swing 实现一个非常、非常简单的可访问性测试,这样我就可以了解为我们已经建立的 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 的窗口,不包含其他已知控件”。如果我将 Swing JButton 替换为 AWT 按钮,如下所示:
Button button = new Button( "Hello World" );
...然后它正常工作,我得到“Banjollity 的窗口,专注于 Hello World 按钮,包含 Hello World 按钮”。
我已经尝试将Java Access Bridge 安装到 JRE/lib/ext(我强烈怀疑这可以正常工作,因为我的程序拒绝启动我的应用程序,直到我将 DLL 放入 Windows/System32 中)但无济于事.
任何人都可以提供帮助或分享一些建议吗?
【问题讨论】:
【参考方案1】:你不知道,Narator 是一个糟糕的屏幕阅读器。您需要安装 java 访问网桥,然后使用 jaws(一次运行 40 分钟作为演示)或 NVDA(也支持 Java 的免费屏幕阅读器)。
【讨论】:
NVDA 一个非常好的功能是它支持语音文本显示在浮动窗口中的模式,因此您在开发时不必听令人毛骨悚然的计算机声音。跨度> 【参考方案2】:正如您对 Button 的发现表明,如果讲述人愿意阅读本机 Windows 应用程序上的标签,那么您也许可以使用重量级组件,以便操作系统能够识别它们,然后讲述人会阅读它们。
【讨论】:
@kd304 恐怕我需要它与 Swing 一起使用。我们有一个成熟的 Swing 应用程序,我们正在寻求增加可访问性。 如果你使用swing,那不排除AWT组件——除非你不喜欢原生的外观。至少对于标签你可以尝试一下。【参考方案3】:这似乎是讲述人的一些问题。如果我将 JAWS 与启用 Java Access Bridge 的 VM 一起使用,那么它可以很好地读取屏幕上的每个组件。
【讨论】:
【参考方案4】:不幸的是,您的 Swing 组件需要实现 IAccessible 接口,一旦完成,讲述人就可以发现组件并读取其内容。没有它,它就无法发现控件。
【讨论】:
以上是关于如何让 Vista 的讲述人向我朗读我的 Swing 组件?的主要内容,如果未能解决你的问题,请参考以下文章
如何让 OpenSSL 在 Windows Vista 上写入 RANDFILE?