在Windows上直接获取Java可访问性

Tim*_*imB 15 java accessibility

背景

我是使用C#,Java,PHP,JavaScript和其他一些语言和库的法律上聋哑的开发人员。我认为自己是一个非常高级的爱好开发人员,并且很快就会开始学习计算机科学。
我知道我们将专注于Java作为编程语言,因此我决定选择一些旧项目。控制台应用程序对我而言不再具有真正的吸引力-我在那里做了很多事情。因此,我通常最终会创建GUI。使用PHP和HTML十分简单,在C#中也不太困难。当然,我需要视觉方面的帮助;但是我可以在WindowsForms和WPF框架中使用C#来建立可靠的GUI并在Windows上运行。可访问性在这里很少成为问题。

具有讽刺意味的是,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);
  }
}
Run Code Online (Sandbox Code Playgroud)

这不是火箭科学。JavaScript的alert功能和MessageBoxC#的功能相似。通常,当这样的消息对话框弹出时,我的盲文显示集中在“确定”或“关闭”按钮上,屏幕阅读器会宣布对话框标题和消息,并且我还可以通过盲文显示键和/滚动来感知对话框的静态文本。或触摸光标(JAWS)和/或屏幕阅读器的各个特殊光标(例如JAWS光标或NVDA光标),它们是鼠标指针,可以在整个屏幕上移动,因此显然最终会落在静态文本上。

但是在Java中会发生什么呢?

  • 在JAWS下,将打开一个“测试”对话框。我没有看到任何消息,只有对话框标题,如果我使用触摸光标,我还会看到“关闭”按钮。
  • 在NVDA下,它与JAW下的一样,除了焦点不会自动移动并且我看不到关闭按钮。
  • 讲述人也会自动移动焦点,但是就像NVDA无法感知关闭按钮一样。

我使用Java SDK 11,最新的Eclipse版本和Windows 10。NVDA版本18.3和最新的JAWS 19版本。我的软件是最新的,至少在JAWS中,我是一个专家用户,他了解大多数(如果不是全部)获取静态文本的方法。这些方法均无效。

问题

有谁碰巧知道Java可访问性如何工作?我知道存在可访问的Java应用程序。我只是不知道如何创建它们。我的对话框问题只是最基本的问题-无法访问带有JFrame,按钮,文本字段等的更复杂的GUI。而且,尽管Oracle基本上会说,只要您不理会我们的组件,并给出可访问的名称和描述,便可以立即使用它们。

任何可能解释我所缺少的内容的输入将不胜感激。

进一步的研究

javax.swing

我在计算机上安装了NetBeans。不,确切地说,我在计算机上安装了NetBeans安装程序。安装程序无法访问。这本身并不罕见-令人惊讶的是,许多开发人员花了很多心思来创建可访问的应用程序,然后创建了无法访问的安装程序。因此,我会尽可能地坚持使用ZIP和手动配置(您知道,在2000年代,并不是所有情况都比以前更糟了,实际上,我很高兴看到那里的纯粹主义者和/或控制狂们鄙视安装程序)。

但是真正有趣的是:NetBeans安装程序看起来就像我用javax.swing创建的对话框和其他GUI一样。也就是说:NVDA和讲述人为空白(对话框/窗口名称除外),并且使用JAWS,如果我使用触摸光标,则还可以检测上下文菜单和关闭按钮。哇,我有一个完整的按钮可以与之互动!-只是它甚至没有回应我使用Enter或空格键单击它(没有尝试单击鼠标,因为我无法使用JAWS光标(也就是鼠标)找到此关闭按钮)。

我会继续研究。但是,如果此安装程序是用javax.swing编写的,而NetBeans也是用javax.swing编写的,那么它对于javax.swing的整体可访问性(对盲人而言)看起来并不好。另外,我将尝试与Oracle联系。毕竟,一定有充分的理由将他们在有关javax.swing的文档中放入“默认情况下可访问性”,并建议使用NVDA进行测试。当然,我只是想念他们实现的明显可访问性-毕竟,我只使用了十二年的屏幕阅读器。

PS。很抱歉,这很讽刺,但这种情况同样使我感到震惊和沮丧。毕竟,一家公司表示默认情况下可以访问其GUI类,而我作为聋哑用户和开发人员的经验告诉我,它们不是。

标准小工具工具包(SWT)

正如注释中所建议的(感谢VGR),SWT确实是可访问的,至少是基类。考虑到它尽可能使用本机窗口小部件,这不足为奇。

Tim*_*imB 1

请注意:此答案尚未完成。本质上我仍然需要去 Oracle 并与他们讨论 javax.swing。尽管如此,我想将其添加为 swing 的部分答案/替代方案,因此任何对此进行调查的人都会得到一个可行的解决方案。


我最近用 Java 创建了第一个完全可访问的 GUI 应用程序。它使用SWT,并且在 Windows 上的可访问性方面表现良好(使用 NVDA、JAWS 和 Narrator 进行测试)。由于这个问题专门针对 Windows,因此我们只需要知道这一点。不过,如果有机会的话,我也会在 Mac OS 和 GNU/Linux 上测试该应用程序,并添加适当的信息。

考虑到 SWT 使用本机组件和可访问行为,我怀疑任何操作系统上的标准组件都不会出现任何问题。但是自定义组件呢?
他们的行为也相当不错。我发现的一个例外是 CCombo - 对于盲文显示用户,如果您使用 JAWS,它会显示为“文本字段”。不过,由于 NVDA 和讲述人正确地感知到它,甚至 JAWS 的行为也有点正确,我猜 JAWS 是我们的罪魁祸首,而不是 SWT。

JFace呢?

由于 JFace 基本上是 SWT 的扩展,我怀疑它在可访问性方面应该很好,但尚未检查。如果您创建 JFace 应用程序,请花时间使用 NVDA 或至少使用讲述人来测试它的可访问性问题。

Microsoft 提供的有关使 C# 应用程序可访问的任何建议也适用于 SWT,尽管执行某些操作的语法非常不同,有时与网页上的 ARIA 相似,而不是 C# 中的可访问性实现。查看代码片段以了解各种可访问性方面的实现(尽管如果标签不是直接位于文本字段的左侧,则只需专门将标签和文本字段设置为关联)。

我希望到目前为止这对您有所帮助,我将继续进行研究。