直接在 Windows 上获得 Java 可访问性背景我的问题问题进一步研究
背景
我是C#,Java,PHP,JavaScript和其他一些语言和库的法律聋哑开发人员。我认为自己是一个非常高级的业余爱好开发人员,很快就会开始学习计算机科学。
我知道我们将专注于Java作为编程语言,因此我决定选择一些我的旧项目。控制台应用程序不再对我真正有吸引力 - 我在那里做了大多数事情。因此,我通常最终会创建GUI。使用PHP和HTML,这很容易,在C#中也不会太难。当然,我需要视觉方面的帮助;但是我可以在WindowsForms和WPF框架中使用C#在Windows上启动并运行一个可靠的GUI。可访问性很少成为那里的问题。
具有讽刺意味的是,Java既是我第一次尝试创建GUI,也是我唯一一种从未让它正常工作的语言。
我的问题
让我们保持简单:我想做的就是创建一个以文本命名的基本消息对话框。让我们来看看它。Test
Hello world
import javax.swing.JOptionPane;
public class GUITest {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null, "Hello world!", "Test", JOptionPane.INFORMATION_MESSAGE);
}
}
这不是火箭科学;JavaScript的函数和C#的函数做类似的事情。通常,当弹出这样的消息对话框时,我的盲文显示器集中在“确定”或“关闭”按钮上,屏幕阅读器会宣布对话框标题和消息,并且我还可以通过盲文显示键和/或触摸光标(JAWS)和/或屏幕阅读器的相应特殊光标(如JAWS光标或NVDA光标)进行滚动来感知对话框的静态文本, 这是鼠标指针,可以在屏幕上到处移动,所以显然最终会落在静态文本上。alert
MessageBox
但是在Java中会发生什么呢?
- 在 JAWS 下,将打开一个“测试”对话框。我没有看到任何消息,只有对话框标题,如果我使用触摸光标,我还看到一个关闭按钮。
- 在NVDA下,它与JAWs下相同,只是焦点不会自动移动,我看不到关闭按钮。
- 讲述人也会自动移动焦点,但就像NVDA不会感知关闭按钮一样。
我使用Java SDK 11,最新的Eclipse版本和Windows 10;NVDA版本18.3和最新的JAWS 19版本。我的软件是最新的,至少在JAWS中,我是一个专家用户,知道大多数(如果不是全部)获取静态文本的方法。这些方法都不起作用。
问题
有没有人碰巧知道Java可访问性是如何工作的?我知道存在可访问的Java应用程序;我只是不知道如何创建它们。我对对话框的问题只是最基本的问题 - 更复杂的GUI与JFrame,按钮,文本字段等一样不可访问。尽管Oracle基本上说,只要你离开我们的组件,也许可以提供可访问的名称和描述,它们就可以开箱即用。
任何可以解释我错过什么的输入将不胜感激。
进一步研究
javax.swing
我在计算机上安装了 NetBeans。不,确切地说,我在计算机上安装了 NetBeans 的安装程序。安装程序是...无法。这本身并不罕见 - 令人惊讶的是,许多开发人员在创建可访问的应用程序时投入了大量精力,然后创建了无法访问的安装程序。因此,我尽可能多地坚持使用ZIP和手动配置(你知道,在2000年代,并非一切都更糟,我实际上很高兴有纯粹主义者和/或控制狂鄙视安装人员)。
但真正有趣的是:NetBeans 安装程序看起来就像我使用 javax.swing 创建的无法访问的对话框和其他 GUI 一样。也就是说:NVDA和讲述人的空白(对话框/窗口名称除外),并且使用JAWS,如果我使用触摸光标,我可以另外检测上下文菜单和关闭按钮。万岁,我有一个完整的按钮可以与之交互!- 只是它甚至没有回应我用回车键或空格键点击它(没有尝试鼠标点击,因为我无法使用JAWS光标(又名鼠标)找到这个关闭按钮)。
我会继续研究。但是,如果这个安装程序是用javax.swing编写的,如果NetBeans也是用javax.swing编写的,那么它看起来对javax.swing的整体可访问性(对于盲人来说)来说并不好。另外,我会尝试与Oracle联系。毕竟,他们一定有充分的理由将“默认情况下可访问性可用”放在关于javax.swing的文档中,并建议使用NVDA进行测试。当然,我只是错过了他们实现的明显的可访问性 - 毕竟,我只使用屏幕阅读器十二年。
抱歉讽刺,但这种情况同样让我感到有趣和沮丧。毕竟,一家公司说他们的GUI类在默认情况下是可访问的,而我作为聋盲用户和开发人员的经验告诉我他们不是。
标准小部件工具包 (SWT)
正如评论中所建议的那样(谢谢,VGR),SWT确实是可访问的,至少是基类。这并不奇怪,因为它在可能的情况下使用原生小部件 - 仍然很高兴知道。