为可访问性编码: 用JFC/Swing将可访问性构建到您的Java应用

所有 Java 应用程序对于残疾人士都应该是可访问的。用 GUI 应用程序实现这一点时 需要格外注意。本文向您展示了如何使用基于 JFC/Swing 的可访问性工具箱事半功倍地 实现最高级别的可访问性。

大多数基于 GUI 的软件设计都基于这一假设:即用户可以清楚地看到屏幕并且可以有 效地使用鼠标选择图形用户界面(GUI)上的选项。对于许多残疾人士,尤其是那些视力 和运动控制受损的人,这个假设是有问题的。1998 年,美国康复法案(Rehabilitation Act)经过修改(请参阅侧栏的 508 条款),以确保残疾人可以访问政府使用的电子和信 息技术产品。因此,许多 IT 企业已经开始采用可访问性指导原则作为其整个 GUI 设计 标准的一部分。自从美国康复法案修正案通过以后,可访问性也成为商业软件设计中日益 重要的问题,从而导致了 Java 平台的一些更改和添加。

本文有助于您快速了解一些联邦政府的可访问性要求,并且也有助于您使用 JFC/Swing 构建满足那些要求的 GUI。我开发了两个基于 Swing 的工具箱来辅助实现可 访问性功能;这两个工具箱如下:

com.ibm.wac.AccessibilityUtils:一组可重用于任何 Swing GUI 的通用实用程序

com.ibm.wac.demos.AccessibilityDemo1:演示应用程序,它包括一组更特定于应用 程序的实用程序,这些实用程序可重用于特定 GUI 中的类似结构

尽管您将在 AccessibilityDemo1 中看到的许多方法都是为单个应用程序创建的,但 很容易使它们一般化以支持多个 GUI。实际上,本文使用的所有代码(请参阅 参考资料 )都是开放源码,欢迎修改这些工具箱以便为您所用。

因为 JFC/Swing 是本文中讨论的所有 GUI 开发的基础,所以假定您熟悉使用 Swing 编程的基本概念。并进一步假定您正在使用 Java 版本 1.3.1 或更新的版本,因为我们 将在这里讨论的部分方法在 Java 平台的较早版本中不可用。

AWT 的可访问性支持

本文中的所有 GUI 构造都是基于 JFC/Swing 的。目前,AWT 对可访问性功能提供有 限的支持。尽管 AWT 组件支持 Accessible 接口,但它们并没有完全实现 AccessibleContext 和其它 Accessible 类。因此,许多辅助性技术不能有效地处理 AWT GUI。

重新审视您的 GUI

因为大多数 GUI 面向视力正常的人,所以对于弱视者或盲人,它们通常是作用有限的 或无用的。同样,大多数 GUI 设计依赖鼠标进行导航,对于运动和视力有残疾的人,这 会成为障碍。在本文中,我们将研究一些将可访问性功能添加到简单 GUI 的方法,侧重 于那些针对视力和运动有残疾人士的功能。

“IBM Guidelines for Writing Accessible Applications Using 100% Pure Java”(请参阅 参考资料)描述了可使残疾人士访问 Java 应用程序的应用程序设 计和编码指南。在这些指南中,我们将侧重于下列内容:

为所有操作提供等价的键盘操作

在组件上设置助记符

为常用功能使用加速键

提供逻辑键盘跳格顺序

提供逻辑组件布局(用于多媒体访问)

标记组件

命名逻辑组

提供语义关系

描述图标与图形

盲人用户界面

盲人必须能够以不依赖于视觉反馈的方式访问应用程序的功能。针对盲人的最常用的 辅助技术是“文本到语音”屏幕阅读器、可刷新的布莱叶盲文显示系统或相关 的 I/O 设备。要使您的 Java 应用程序可访问,您需要以标准代码格式描述每个应用程 序组件,这种格式可由辅助技术(AT)设备转换。例如,对于 GUI 组件(如按钮),您 需要命名和描述其功能,然后将这些组件作为诸如“发送”、“进入 ”或“退出”之类的消息传递给用户。

一些 GUI 应用程序组件传达信息时比其它组件需要考虑更多的东西。例如,盲人如何 才能访问表中可视化格式的信息,或图标、树或者滚动列表呢?要使这类组件可访问,要 求您提供大量的文本形式的描述性信息。尽管这个任务可能很乏味,但它是迈向创建支持 可访问性应用程序必不可少的步骤。

时间: 2024-12-29 16:24:53

为可访问性编码: 用JFC/Swing将可访问性构建到您的Java应用的相关文章

JFC/Swing活学活用之创建自定义图像组件

创建 引言 本文将讲述如何应用JFC/Swing内建的图像组件来创建完全自定义的基于图像的用户接口. 大多数Swing应用程序是通过标准VM提供的,或者是客户提供的外观和感觉(L&F)来获取它们的外在展示.L&F是一个完整的体系架构,VM需要做很多内在的工作,并且它还不是完全自定义的.举个例子来说吧,在基于L&F的前提下,我们可以创建一个按钮,看起来有点像交通岗上的"红灯",随之而来的在你的应用中所有的按钮就都有了这样的"相貌".然而有时我们

JFC/Swing活学活用之JLabel文字魔法

    前言 本文将讲述如何借助Java 2D的"魔力"来帮助JFC/Swing的JLabel组件创建更加丰富多彩的应用. JLabel作为JFC/Swing架构的基础组件之一,应用非常广泛.当你想要绘制不可编辑的文本时,JLabel是JFC/Swing提供给我们的唯一选择.一般来说,改变字体.字号.字体颜色,甚至可以加入图标.通过在组件中应用HTML语言,甚至可以加入下划线等特效.对于大多数应用来说,这已经足够好了.但有时你可能有更进一步的要求,比如你需要下拉阴影效果或浮雕效果的时候

JFC/Swing活学活用系列之定制JList显示

显示 点击这里下载源文件 引言 在图形用户界面方面(GUI),Java一直无法与C++.PB.Delphi之类抗衡,使用早期Java/AWT包所开发的界面实在是让人不敢恭维.随着JFC/Swing的日趋成熟,开发出与可以与C++媲美的GUI不再是"不可能完成的任务".除了具有丰富的界面组件之外,以下优秀的特性更让Swing如虎添翼.Swing是以100%纯Java实现的,且辅以JDK 1.1 轻量级UI框架为基础,没有本地代码,独立于操作系统之外,基于MVC设计模式.采用可插入的外观感

ast eport-FastReport发布到IIS服务器多人访问时就报这个错,人少访问不报错

问题描述 FastReport发布到IIS服务器多人访问时就报这个错,人少访问不报错 1C FastReport发布到IIS服务器多人访问时就报这个错,人少访问不报错ERROR: (Text39): Error CS0103: The name 'pRptHawb' does not exist in the current context (Text40): Error CS0103: The name 'pRptHawb' does not exist in the current cont

锁-我遇到的问题是,一个页面在连接访问一段时间后会禁止访问。但是换个浏览器就可以继续访问。这个怎么破?

问题描述 我遇到的问题是,一个页面在连接访问一段时间后会禁止访问.但是换个浏览器就可以继续访问.这个怎么破? 我遇到的问题是,一个页面在连接访问一段时间后会禁止访问.但是换个浏览器就可以继续访问.这个通过cookie进行封锁的网页怎么抓取,前提是没有登录.他是一个cookie有一定的访问次数限制,到达次数后就会被疯掉,然后换一个浏览器就可以继续访问 解决方案 你爬虫还用浏览器?用服务器端httprequest对象,httprequest不附带cookie,每次会启用新会话 解决方案二: 我用的h

linux内核 访问外设-Linux驱动中访问外设端口的outb为什么不是访问内存空间

问题描述 Linux驱动中访问外设端口的outb为什么不是访问内存空间 原文如下面,其中第一个宏的意思不是把值v赋给了内存地址为a的内存空间吗,为什么是访问outb是往外设端口写数据的? 在linux的驱动程序中,都会使用大量的outb.outw.inb.inw等等宏来访问硬件或寄存器.这些宏的定义都在相应处理器体系下的include/asm目录下的io.h中定义.追究下去,这些宏最终就是一个volatile变量的的赋值: #define arch_putb(v,a) (*(volatile u

sl-同事都能访问的公司silverlight的网站,我电脑访问显示一片空白

问题描述 同事都能访问的公司silverlight的网站,我电脑访问显示一片空白 同事都能访问的公司silverlight的网站,我机器访问显示一片空白,已经安装silverlight新最版,ie下提示脚本错误,详细错误如下: 消息: Unhandled Error in Silverlight Application [Arg_COMException] 参数: 调试资源字符串不可用.密钥和参数通常提供足够的信息用以诊断该问题.请访问 http://go.microsoft.com/fwlin

java-直接用IP地址加8080端口访问可以访问到图片,而直接用域名访问却访问不到图片

问题描述 直接用IP地址加8080端口访问可以访问到图片,而直接用域名访问却访问不到图片 当然浏览器默认端口是80端口,但是其他的js或者css不管是8080端口还是80端口都能访问到,而图片只有8080端口才可以访问,这要怎么样才能在80端口下访问到呢 解决方案 图片玉js.css的写法是否一样呢? 解决方案二: 服务器程序实现的问题吧,换一个服务器程序 解决方案三: 图片是不是和域名在不同目录中,确认你ip地址和你的域名指向的都是同一个文件夹什么的 解决方案四: 看一下你的web 服务器对于

webapi接口访问验证是否登陆的解决方案!每次访问接口都需要验证用户是否登陆!

问题描述 webapi接口访问验证是否登陆的解决方案!每次访问接口都需要验证用户是否登陆! webapi接口访问验证是否登陆的解决方案!每次访问接口都需要验证用户是否登陆! 解决方案 不明白,可以说的明白点么 解决方案二: 就是用户在每次访问接口的时候要在接口中验证是否登陆过,登陆过就可以访问,没有登录就返回没有登录的信息! 解决方案三: 通过session ID等作为参数 解决方案四: 谁有设计思路啊,完全不知道怎么处理了! 解决方案五: 用wenbservice,不是有sessioniD吗?