可访问性在软件开发中至关重要。尤其是在银行、医疗和教育等领域,可用性会影响到广泛且多样化的用户群体。政府及其他组织也要求软件需对残障人士友好。

然而,许多旧版 Java 桌面应用在可访问性方面存在诸多不足,例如屏幕阅读器支持不完善、键盘导航受限、缺乏高对比度模式等,导致部分用户难以使用。

相比之下,现代浏览器和 Web 库在设计时充分考虑了可访问性,不仅具备内置的可访问性功能,浏览器扩展程序还可以进一步提升可用性。

本文将介绍如何利用 Web 技术来提升 Java 桌面应用程序的可访问性。

Java 应用的可访问性 

Java 的 UI 工具包并未忽视可访问性问题。Swing 通过 javax.accessibility 包提供了良好的支持,JavaFX 的 Accessibility API 具备丰富的自定义选项,并兼容各个平台的辅助工具。SWT 采用原生控件,因此具备内置的可访问性功能。

然而,将这些 API 集成到旧代码中往往十分复杂且耗时。许多 Java 应用在开发时,并未将可访问性作为优先考虑的因素。随着时间推移,一些可访问性问题已深深植根于用户体验之中,修复起来困难且成本高昂。

要让 UI 符合现代可访问性标准并不容易。例如,如果您想增加 Swing 中聚焦文本字段的对比度,就需要花费不少精力:

var textField = new JTextField();
var defaultBorder = textField.getBorder();
var focusBorder = new CompoundBorder(
    createLineBorder(Color.BLUE, 3),
    new EmptyBorder(2, 2, 2, 2)
);

textField.addFocusListener(new FocusListener() {
    @Override
    public void focusGained(FocusEvent e) {
        textField.setBorder(focusBorder);
    }
    @Override
    public void focusLost(FocusEvent e) {
        textField.setBorder(defaultBorder);
    }
});

如果将这种改动应用到应用程序的每个组件,可访问性优化很快就会变成一项令人望而生畏的任务。如今,受限于过时的设计、有限的预算,以及可能破坏现有功能的风险,这一挑战变得更加具有挑战性。

Web 中的可访问性 

可访问性是 Web 设计的重要组成部分。WCAG(Web 内容无障碍指南)指南概述了 Web 可访问性的四大原则:网站必须是可感知的、可操作的、可理解的和健壮的。现代 Web 框架在设计时已考虑到许多这些要求,减少了额外编码的需求。

浏览器扩展程序在可访问性方面也发挥着重要作用。它们可以弥补现有的不足,并且用户几乎无需额外操作即可受益。常见的示例包括:

  • 屏幕阅读器:为视力受损或盲人用户朗读页面内容。
  • 阅读优化工具:去除页面干扰元素,提高可读性。
  • 颜色对比度调节器:允许用户自定义颜色,提升视觉可见度。
  • 焦点增强工具:突出显示当前激活的元素,方便导航。
  • 键盘导航工具:支持仅使用键盘进行页面操作。
  • 可访问性测试工具:帮助开发者确保符合 WCAG 标准。

通过 JxBrowser 实现可访问性 

借助 Web 技术的优势,您可以轻松地提升 Java 应用的可访问性。嵌入式浏览器让您能够将 Java 代码与 Web 界面结合,从而创建一个混合应用

在本文中,我们将探究 JxBrowser,这是一款颇受欢迎的解决方案,用于将基于 Chromium 的浏览器嵌入到 Swing、JavaFX、SWT 或 Compose Desktop 应用程序中。

将 JxBrowser 添加到项目中 

以下是将 JxBrowser 添加到 Gradle 项目的方法:

plugins {
    id("com.teamdev.jxbrowser") version "1.2.1"
}

jxbrowser {
    version = "8.2.2"
}

dependencies {
    // 为 JxBrowser 与 Swing 集成添加依赖项。
    // 还提供了:jxbrowser.swt, jxbrowser.javafx, jxbrowser.compose。
    implementation(jxbrowser.swing)

    // 为当前平台的 Chromium 二进制文件添加依赖项。
    implementation(jxbrowser.currentPlatform)
}

如果您不使用 Gradle,请查看 Maven 快速入门指南

添加可访问性扩展程序 

在 JxBrowser 中,您可以从 CRX 文件或 Chrome 应用商店安装 Chrome 扩展程序。有关如何以编程方式获取 CRX 文件的详细信息,请参考 Chrome 扩展程序指南

以下是如何使用 CRX 文件通过一行代码安装 High Contrast 扩展程序:

var extension = profile.extensions().install(Paths.get("High Contrast.crx"));

在很多情况下,安装一个扩展程序就足以在网页上看到效果了。不过,有些扩展程序会通过弹出窗口提供可配置的功能。弹出窗口是在点击 Chrome 工具栏中的扩展程序图标时出现的对话框。JxBrowser 允许您通过代码点击扩展程序:

extension.action(browser).ifPresent(ExtensionAction::click);

之后,扩展程序的弹出窗口将在新窗口中打开:

扩展程序弹出窗口的屏幕截图

High Contrast 扩展程序的弹出窗口。

如果我们不想在应用启动时显示这个弹出窗口怎么办?例如,我们可能希望在安装后自动启用高对比度模式。

为了实现这一点,我们可以注册 OpenExtensionActionPopupCallback 来替代默认行为。在这个回调中,我们可以访问弹出窗口及其 HTML 文档。从这里,我们只需要通过 JavaScript 点击相应的单选按钮来选择我们想要的模式。

以下是代码示例:

var javaScript = """
    const selector = 'span[i18n-content="highcontrast_increased_contrast"]';
    document.querySelector(selector)
            ?.closest('label')
            ?.querySelector('input[type="radio"]')
            ?.click();
""";
browser.set(OpenExtensionActionPopupCallback.class, (params, tell) -> {
    // 获取扩展程序的操作弹出窗口。
    var popupBrowser = params.popupBrowser();
    // 等待文档完全加载。
    popupBrowser.navigation().on(FrameDocumentLoadFinished.class, event -> {
        var frame = event.frame();
        // 通过 JavaScript 点击所需的按钮。
        frame.executeJavaScript(javaScript);
    });
    tell.proceed();
});

当应用启动时,高对比度模式将自动启用。

两个应用程序的屏幕截图

常规 Swing 应用程序 vs. 高对比度的 JxBrowser 应用程序。

结论 

在本文中,我们讨论了如何通过迁移到 Web 来更轻松地实现良好的可访问性,并且几乎不需要额外的工作。借助 JxBrowser,您可以快速而轻松地使用 Chrome 扩展程序来实现这一目标。

Spinner

发送中。。。

抱歉,发送中断

请再次尝试,如果问题仍然存在,请联系我们 info@teamdev.com.

阅读并同意条款以继续。

您的个人 JxBrowser 试用密钥和快速入门指南将在几分钟内发送至您的电子邮箱。