国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

用 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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南郑县| 长海县| 探索| 高安市| 青州市| 扬州市| 新乡县| 九寨沟县| 太谷县| 华亭县| 东兰县| 洛扎县| 山阳县| 金溪县| 西昌市| 洱源县| 达州市| 尉氏县| 美姑县| 嵊州市| 铁力市| 休宁县| 余庆县| 泾阳县| 鹿泉市| 鄂尔多斯市| 防城港市| 调兵山市| 徐汇区| 株洲县| 新沂市| 焉耆| 怀柔区| 淮南市| 榆林市| 海伦市| 浑源县| 台安县| 梁平县| 雅江县| 资兴市|