如何让 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 组件?的主要内容,如果未能解决你的问题,请参考以下文章

华为手机如何朗读文本

如何在 Mac 应用程序中朗读文本? [复制]

如何让 OpenSSL 在 Windows Vista 上写入 RANDFILE?

如何让 OpenSSL 在 Windows Vista 上写入 RANDFILE?

华为手机如何朗读文本

旁白朗读标签的文字两次