当使用屏幕阅读器(如NVDA)时,我希望能够在将鼠标悬停在屏幕上时听到菜单文本。当我按下菜单栏中的按钮时,我能够听到文字,但是当我将鼠标悬停在它们上面时(屏幕阅读器会在仅仅悬停在按钮上时读取其他程序的菜单)。
我已经设置了如下的AccessibleContext:
JMenu.getAccessibleContext().setAccessibleName("text");
JMenu.getAccessibleContext().setAccessibleDescription("more text");
我可以将listeners
设置为检测鼠标悬停在它们上面的对象,但我不知道是否/如何将文本转换为屏幕阅读器进行阅读。我尝试了ToolTipText
,但屏幕阅读器也没有读取该文本。 JMenu上的RequestFocus
可以正常工作,但只需将鼠标悬停在对象上就可以将焦点设置为对象,这会带来其他问题。
当用鼠标悬停在菜单栏上时,有谁知道如何让屏幕阅读器读取JMenu文本?
我在Windows机器(XP和W7)上使用Java6 EE和Java AccesBridge(版本2.02)。
答案 0 :(得分:1)
Swing是与Java中的可访问性相关的GUI技术中较弱的,与SWT相比无论如何都是如此。你可以尝试一些事情。
首先要确保设置了任何辅助功能字段(您已开始使用)。我不记得Java是否有AccessibleRole字段,但您可以尝试将其设置为菜单项和menuitem菜单项。
您可以尝试的另一件事是AccessibleMenu JMenu.AccessibleJMenu组件。这是进一步阅读的产物,所以我无法从经验中验证它。但它及其周边的课程可能适合您的需求。
如果这些不起作用,您可以尝试直接与人们的屏幕阅读器交谈。 Quentin C有一个很好的库,Universal Speech。我自己是这个库的新手,但它确实有一个Java实现,应该向您展示如何在Java程序中使用它。通常我不推荐这种方法,除非使UI可访问真的不起作用。
最后一个选项是使用SWT组件而不是Swing组件,即使只是用于菜单栏。我不确定你对这个有多么敏锐,但这是一个选择,应该解决它。
我希望其中一条建议可以帮助您解决问题。