亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用 JFC/Swing 將可訪問性構建到您的 Java 應用程序中

2019-11-18 11:57:54
字體:
來源:轉載
供稿:網友

  所有 java 應用程序對于殘疾人士都應該是可訪問的。用 GUI 應用程序實現這一點時需要格外注重。本文向您展示了如何使用基于 JFC/Swing 的可訪問性工具箱事半功倍地實現最高級別的可訪問性。
  大多數基于 GUI 的軟件設計都基于這一假設:即用戶可以清楚地看到屏幕并且可以有效地使用鼠標選擇圖形用戶界面(GUI)上的選項。對于許多殘疾人士,尤其是那些視力和運動控制受損的人,這個假設是有問題的。1998 年,美國康復法案(Rehabilitation Act)經過修改
  以確保殘疾人可以訪問政府使用的電子和信息技術產品。因此,許多 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 平臺的較早版本中不可用。
  重新審閱您的 GUI
  因為大多數 GUI 面向視力正常的人,所以對于弱視者或盲人,它們通常是作用有限的或無用的。同樣,大多數 GUI 設計依靠鼠標進行導航,對于運動和視力有殘疾的人,這會成為障礙。在本文中,我們將研究一些將可訪問性功能添加到簡單 GUI 的方法,側重于那些針對視力和運動有殘疾人士的功能。
  
  “IBM Guidelines for Writing Accessible applications Using 100% Pure Java”(請參閱參考資料)描述了可使殘疾人士訪問 Java 應用程序的應用程序設計和編碼指南。在這些指南中,我們將側重于下列內容:
  
  為所有操作提供等價的鍵盤操作
  在組件上設置助記符
  為常用功能使用加速鍵
  提供邏輯鍵盤跳格順序
  提供邏輯組件布局(用于多媒體訪問)
  標記組件
  命名邏輯組
  提供語義關系
  描述圖標與圖形
  請參閱參考資料以查看完整的指導原則文檔。
  
  盲人用戶界面
  盲人必須能夠以不依靠于視覺反饋的方式訪問應用程序的功能。針對盲人的最常用的輔助技術是“文本到語音”屏幕閱讀器、可刷新的布萊葉盲文顯示系統或相關的 I/O 設備。要使您的 Java 應用程序可訪問,您需要以標準代碼格式描述每個應用程序組件,這種格式可由輔助技術(AT)設備轉換。例如,對于 GUI 組件(如按鈕),您需要命名和描述其功能,然后將這些組件作為諸如“發送”、“進入”或“退出”之類的消息傳遞給用戶。
  
  一些 GUI 應用程序組件傳達信息時比其它組件需要考慮更多的東西。例如,盲人如何才能訪問表中可視化格式的信息,或圖標、樹或者滾動列表呢?要使這類組件可訪問,要求您提供大量的文本形式的描述性信息。盡管這個任務可能很乏味,但它是邁向創建支持可訪問性應用程序必不可少的步驟。
  
  添加描述性信息
  使您的應用程序對視力受損者可訪問的第一步,是提供對將要接收焦點的組件的描述。當用戶或 AT 閱讀器選擇組件時(通常是通過鍵盤控制裝置),則組件接收焦點。接收焦點的組件對應用程序功能(而非其設計或布局)是不可或缺的。因此,打個比方說,包含其它組件的 JPanel 本身不接收焦點,盡管其內部的個別組件可能將接收焦點。另一方面,假如面板對信息進行了分組,有時則需要使該分組可訪問。類似地,通過使用 setLabelFor(Component) 方法可將標簽與其它組件相關聯。
  
  在 Swing 中,我們使用 javax.accessibility.Accessible 接口來提供關于應用程序組件的描述性信息。所有 Swing 組件都實現 Accessible 接口,該接口只有一個方法 javax.accessibility.AccessibleContext getAccessibleContext()。使用 getAccessibleContext() 方法,AT 閱讀器可以訪問所有它需要的信息來將組件的描述呈現給用戶,并且與該組件交互和使用該組件。
  
  AccessibleContext() 定義了兩個可用來提供可訪問信息的方法:
  
  setAccessibleName(String name) 設置與給定 Accessible 對象相關聯的 name。通常,只要組件接收到焦點,輔助閱讀器就會提供這個名稱。
  
  
  setAccessibleDescription(String description) 設置與給定 Accessible 對象相關聯的 description。通常,當用戶要求關于組件的更多具體信息時,輔助閱讀器將提供這個描述。
  標準 Swing 組件通常都為 AccessibleName 和 AccessibleDescription 提供了缺省值。例如,JLabel 或 JTextField 文本將被用作其缺省的可訪問名稱。同樣,任何組件的 ToolTip 將被用作其缺省的可訪問描述。但是,我的經驗表明,缺省值不能為給定組件提供最佳名稱或描述,因此我建議您顯式地設置您的組件值。
  
  要設置文本域值,您需要輸入一些類似于清單 1 所示的代碼:
  
  清單 1. 設置文本域值
  import javax.swing.*;
   :
  JTextField streetField = new JTextField("", 20);
  streetField.setName("streetField");
  streetField.getAccessibleContext().
    setAccessibleName("Street Entry Field");
  streetField.getAccessibleContext().
    setAccessibleDescription("Enter a street address");
  streetField.setToolTip("Street Address");
   :
  -- set any other desired characteristics --
  
  
  
  
  類似地,要設置按鈕的值,您可以輸入清單 2 中所示的代碼:
  
  清單 2. 設置按鈕的值
  import javax.swing.*;
   :
  JButton okButton = new JButton("OK");
  okButton.setName("okButton");
  okButton.getAccessibleContext().setAccessibleName("OK Button");
  okButton.getAccessibleContext().setAccessibleDescription(
    "Activate to commit changes and continue");
  okButton.setToolTip("Commit changes");
  okButton.setMnemonic((int)'O');
   :
  -- set any other desired characteristics --
  
  
  
  可訪問鍵盤導航
  通常 Swing 答應用跳格(Tab)、反向跳格和箭頭鍵進行鍵盤導航。遺憾的是,這個系統難以實現并且很費時,因為它要求用戶導航所有中間組件才能到達它需要的那個組件。對于更有效的鍵盤導航,用戶應該能夠迅速地在重要組件之間切換,而無須考慮它們在 GUI 布局中的順序。我們可以將助記符鍵盤設置用于 javax.swing.AbstractButton 和 javax.swing.JLabel 的子類以及應用程序菜單中的項。助記符通常稱為加速鍵,因為它們根據 GUI 內容直接進行工作。
  
  在為您的界面建立了助記符系統之后,用戶就可以通過使用 Alt 鍵和鍵盤上表示該組件的助記符鍵(Alt+鍵)導航到任何想用的組件上。但是這種設置有一個問題,就是它對于頂級組件(通常是 JFrame 或 JDialog)而言是全局的。這意味著基本上只有 26 個唯一值,卻要分配給所有菜單和菜單項以及基本的 GUI 內容。在頻繁使用的 GUI 上并非所有組件都可以鏈接到助記符鍵,因此您必須確定哪些組件對于用戶是最重要的,然后相應的設置它們。我建議您為菜單項、重要的操作按鈕(如 OK 或 Cancel)和 GUI 中每個邏輯組中的初始組件創建助記符鏈接,然后讓用戶跳格到其它每個組件上。
  
  設置跳格順序和初始焦點
  對于大多數基于跳格的邏輯導航,我建議您將組件按您希望跳格選擇的順序添加到容器中。您可能希望以相同的方式組織嵌套的容器(即 JPanel)。盡管從上到下、從左向右(T2B、L2R)的順序是標準的,但您可能希望建立不同的系統,如基于列排列的系統。您可以使用方法 JComponent.setNextFocusableComponent(Component c)(或 Java 1.4 中的類 java.awt.FocusTraversalPolicy)來強制規定定制的跳格順序。AccessibilityDemo1 GUI 說明了一個跳格系統,該系統基于將組件以 T2B、L2R 順序添加到容器中。
  
  在定義了跳格順序之后,您需要確保每個初始組件都在選中其容器時接收到焦點。當容器接收到焦點時(請參閱參考資料以獲取關于 FocusListener 的更多信息),它應該向期望的初始組件發出 java.awt.Component.requestFocus()(在 Java 1.4 中是 java.awt.Component.requestFocusInWindow())。
  
  另一種方法是在窗口激活時設置初始焦點。例如,下列代碼將 WindowListener 添加到 JFrame,后者在窗口被激活時為 JTextField 請求焦點。
  
  清單 3. 在激活時設置初始焦點
  import java.awt.event.*;
  import javax.swing.*;
   :
  JFrame frame = new JFrame();
  JTextField field = new JTextField(); /// field to get initial focus
  boolean focusSet;
   :
  frame.addWindowListener(new WindowAdapter() {
   public void windowActivate() {
     if ( !focu

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情手机在线视频| 欧美日韩中文字幕日韩欧美| 97在线视频免费看| 日韩精品中文字幕在线播放| 久久久久久久久中文字幕| 日韩欧美精品在线观看| 久久免费视频网站| 久久精品国产v日韩v亚洲| 国产精品一区二区av影院萌芽| 91精品国产91久久久久久久久| 日韩欧美精品中文字幕| 国外色69视频在线观看| 在线精品高清中文字幕| 国产91精品久久久久久| 91精品国产综合久久久久久久久| 91po在线观看91精品国产性色| 亚洲精品网址在线观看| 国产精品亚洲自拍| 亚洲视频在线播放| 国产亚洲欧美日韩一区二区| 好吊成人免视频| 日韩av免费看| 国内偷自视频区视频综合| 欧美在线观看日本一区| 97在线视频免费看| 成人激情视频小说免费下载| 亚洲激情在线观看视频免费| 欧美激情在线播放| 国产欧美在线播放| 国产成人在线亚洲欧美| 日韩欧美精品网址| 久久久国产精彩视频美女艺术照福利| 在线精品国产成人综合| 久久99精品久久久久久噜噜| 欧美电影免费观看大全| 97在线观看免费| 国产成人精品在线视频| 久久精品成人一区二区三区| 国产精品爽爽爽爽爽爽在线观看| 久久综合色影院| 992tv成人免费影院| 亚洲国产天堂久久综合网| 亚洲电影免费观看高清完整版在线| 在线播放国产一区中文字幕剧情欧美| 91精品在线看| 精品国产依人香蕉在线精品| 精品国产一区二区三区四区在线观看| 国产精品高精视频免费| 97香蕉久久夜色精品国产| 2021国产精品视频| 日韩中文在线中文网在线观看| 亚洲国产成人在线播放| 中文字幕日韩在线视频| 伊人成人开心激情综合网| 久久99精品国产99久久6尤物| 亚洲国产欧美一区二区丝袜黑人| 午夜精品理论片| 亚洲人午夜精品免费| 欧美有码在线观看视频| 亚洲天堂精品在线| 国产精品日韩在线观看| 日韩电影免费观看在线观看| 国产97人人超碰caoprom| 日韩精品在线视频| 日韩精品高清在线观看| 亚洲日本aⅴ片在线观看香蕉| 欧美亚洲一区在线| 亚洲国产欧美一区二区丝袜黑人| 午夜精品蜜臀一区二区三区免费| 2019中文在线观看| 亚洲成人av资源网| 亚洲免费伊人电影在线观看av| 在线观看欧美成人| 成人黄色片在线| 久99九色视频在线观看| 久久手机免费视频| 亚洲香蕉成视频在线观看| 亚洲精品一区二区三区婷婷月| 欧美综合国产精品久久丁香| 一本大道久久加勒比香蕉| 45www国产精品网站| 久久成人这里只有精品| 欧美激情第1页| 中文字幕精品—区二区| 国语自产精品视频在线看抢先版图片| 久色乳综合思思在线视频| 不卡伊人av在线播放| xxxx欧美18另类的高清| 欧美精品久久久久久久免费观看| 欧美日韩在线视频一区二区| 精品在线观看国产| 欧美日韩午夜剧场| 麻豆乱码国产一区二区三区| 欧美一区二区三区四区在线| 亚洲欧美国产精品专区久久| 中文字幕亚洲图片| 亚洲欧美国产高清va在线播| 日韩高清中文字幕| 午夜精品久久久久久久久久久久久| 久久久久久高潮国产精品视| 精品国产一区av| 97人人做人人爱| 亚洲自拍高清视频网站| 亚洲午夜精品久久久久久性色| 在线观看日韩av| 日本欧美国产在线| 欧美成人午夜激情在线| 日本伊人精品一区二区三区介绍| 精品动漫一区二区| 欧美性精品220| 亚洲美女动态图120秒| 精品国产乱码久久久久久婷婷| 韩国欧美亚洲国产| 欧美视频在线免费| 欧美高清在线观看| 亚洲男子天堂网| 亚洲无限乱码一二三四麻| 国外视频精品毛片| 久久久免费av| 91日本在线视频| 日韩电影视频免费| 丝袜美腿精品国产二区| 伊人伊成久久人综合网站| 欧美色另类天堂2015| 日韩欧美在线视频日韩欧美在线视频| 欧美高清视频免费观看| 黄色一区二区在线观看| 国产成人精品视频在线| 在线视频亚洲欧美| 菠萝蜜影院一区二区免费| 久久久久久这里只有精品| 久久精品99国产精品酒店日本| 欧美大人香蕉在线| 热re91久久精品国99热蜜臀| 日韩专区中文字幕| 亚洲国产精品专区久久| www国产91| 亚洲人午夜精品| 日韩有码在线播放| 青青草原一区二区| 国产精品h在线观看| 欧美国产日韩一区| 久久久999精品免费| 久久久久北条麻妃免费看| 成人国产亚洲精品a区天堂华泰| 成人av番号网| 亚洲国产精品女人久久久| 91精品国产高清自在线| 国产精品三级美女白浆呻吟| 九九热视频这里只有精品| 久久久久久这里只有精品| 亚洲aaaaaa| xxx成人少妇69| 中文字幕国产亚洲2019| 久久亚洲精品中文字幕冲田杏梨| 亚洲高清免费观看高清完整版| 亚洲一区二区三区四区视频| 欧美日韩在线视频一区二区| 91精品国产高清| 久久久之久亚州精品露出| 永久免费精品影视网站| 国产精品欧美日韩| 国产精品免费网站| 97欧美精品一区二区三区|