4

使用屏幕阅读器(如 NVDA)时,我希望将鼠标悬停在菜单上时能够听到菜单的文本。当我按下菜单栏中的按钮时,我能够听到文本,但当我将鼠标悬停在它们上方时则无法听到(屏幕阅读器仅在将鼠标悬停在按钮上时才会读取其他程序的菜单)。

我已将 AccessibleContext 设置如下:

JMenu.getAccessibleContext().setAccessibleName("text");
JMenu.getAccessibleContext().setAccessibleDescription("more text");

我可以设置listeners检测鼠标何时悬停在它们上方的对象,但我不知道是否/如何将文本投射到屏幕阅读器以进行阅读。我试过ToolTipText了,但屏幕阅读器也不会读取该文本。RequestFocus在 JMenu 上有效,但是仅通过将鼠标悬停在对象上来将焦点设置为对象会带来其他问题。

有谁知道当鼠标悬停在菜单栏上时如何让屏幕阅读器读取 JMenu 文本?

我在 Windows 机器(XP 和 w7)上使用 Java6 EE 和 Java AccesBridge(2.02 版)。

4

1 回答 1

1

无论如何,与 SWT 相比,Swing 是 Java 中与可访问性相关的 GUI 技术中较弱的一个。您可以尝试几件事。

首先是确保设置了任何可访问性字段(您已经开始)。我不记得 Java 是否有 AccessibleRole 字段,但您可以尝试将其设置为菜单项的 menu 和 menuitem。

您可以尝试的另一件事是 AccessibleMenu JMenu.AccessibleJMenu 组件。这是进一步阅读的产物,所以我无法从经验中验证它。但它及其周边类可能适合您的需求。

如果这些不起作用,您可以尝试直接与人们的屏幕阅读器交谈。Quentin C 有一个很好的库来做到这一点,Universal Speech。我自己是这个库的新手,但它确实有一个 Java 实现,应该向您展示如何在 Java 程序中使用它。通常我不会推荐这种方法,除非使 UI 可访问真的不起作用。

最后一个选项是使用 SWT 组件而不是 Swing 组件,即使只是用于您的菜单栏。我不确定您对此有多热衷,但这是一种选择,应该解决它。

我希望这些建议之一可以帮助您解决问题。

于 2013-03-24T11:37:18.870 回答