<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Feeling

        三人行,必有我師焉

       ::  :: 新隨筆 :: 聯系 ::  :: 管理 ::
      185 隨筆 :: 0 文章 :: 392 評論 :: 0 Trackbacks
    最近由于項目的需要,研究了一下SWT的Accessibility。關于Accessibility,這是一個很難纏的search,給殘疾人用的東東,正常人基本上不會用到,網上文章少之又少。可以查閱到的一篇來自于IBM developerWorks的文章:使用 Eclipse 創建易訪問的應用程序:介紹

    易訪問性是一個總括的術語,它包括生成使具有各種殘疾的人易用的產品所涉及的所有東西和人。美國已經立法,不符合Accessibility規范的軟件不能夠在政府部門銷售。在美國,創建易訪問的應用程序的主要商業(對比人道主義)驅動力是 Rehabilitation Act 1998 年的修正法案,稱為 Section 508。Section 508 要求聯邦機構使他們的信息技術對帶有殘疾的人易于訪問。


    Eclipse 擁有一個包含 API:org.eclipse.swt.accessibility 的易訪問性包。Eclipse 3.0 易訪問性特征是基于 MSAA 1.3 程序設計模型所提供的功能。您可以將 Eclipse 中的 Accessible 對象聯系到每個控件上,并且 org.eclipse.swt.accessibility 接口中的方法集對應 MSAA 1.3 IAccessible 界面中的消息集。

     org.eclipse.swt.accessibility 的接口    

    Interface Summary
    AccessibleControlListener Classes that implement this interface provide methods that deal with the events that are generated when an accessibility client sends a message to a control.
    AccessibleListener Classes that implement this interface provide methods that deal with the events that are generated when an accessibility client sends a message to a control.
    AccessibleTextListener Classes that implement this interface provide methods that deal with the events that are generated when an accessibility client sends a message to a control.

    SWT 自身包含的控件中只有寥寥幾個用到了Accessibility,JFace里也不多。看了所有的Accessibility相關代碼,只能總結一部分規律:
    1. 一般的復雜控件是沒有必要定義Accessibility的。
    2. 如果是模擬實現一個比較簡單的基本控件,比如Combo,Label,Spinner等,有必要定義Accessibility。  
    3. 所有的自定義控件都要實現AccessibleControlListener接口。
    4. 所有的包含文本框的控件都要實現AccessibleTextListener接口。
    5. 設置AccessibleListener的getHelp( )最好是給控件加上Tooltip,因為Wineyes這些屏幕閱讀器閱讀都是根據Tooltip,無視getHelp( )的設置。
    6. 設置AccessibleListener的getName( ),一般來說,可以設置為這個控件相關聯的Label的Text或者該控件上的某部分文字,自己斟酌考慮設置。
    7. getKeyboardShortcut( ),考慮控件的快捷操作方式,如果需要的話。

    以下是CCombo的Accessibility代碼:

    void initAccessible() {
        AccessibleAdapter accessibleAdapter = new AccessibleAdapter () {
           publicvoid getName (AccessibleEvent e) {
               String name = null;
               Label label = getAssociatedLabel ();
               if (label != null) {
                  name = stripMnemonic (label.getText());
               }
               e.result = name;
           }
           publicvoid getKeyboardShortcut(AccessibleEvent e) {
               String shortcut = null;
               Label label = getAssociatedLabel ();
               if (label != null) {
                  String text = label.getText ();
                  if (text != null) {
                      char mnemonic = _findMnemonic (text);
                      if (mnemonic != '\0') {
                         shortcut = "Alt+"+mnemonic;
                      }
                  }
               }
               e.result = shortcut;
           }
           publicvoid getHelp (AccessibleEvent e) {
               e.result = getToolTipText ();
           }
        };
        getAccessible ().addAccessibleListener (accessibleAdapter);
        text.getAccessible ().addAccessibleListener (accessibleAdapter);
        list.getAccessible ().addAccessibleListener (accessibleAdapter);
        arrow.getAccessible ().addAccessibleListener (new AccessibleAdapter() {
           publicvoid getName (AccessibleEvent e) {
               e.result = isDropped () ? SWT.getMessage ("SWT_Close") : SWT.getMessage ("SWT_Open");
           }
           publicvoid getKeyboardShortcut (AccessibleEvent e) {
               e.result = "Alt+Down Arrow";
           }
           publicvoid getHelp (AccessibleEvent e) {
               e.result = getToolTipText ();
           }
        });
     
        getAccessible().addAccessibleTextListener (new AccessibleTextAdapter() {
           publicvoid getCaretOffset (AccessibleTextEvent e) {
               e.offset = text.getCaretPosition ();
           }
           publicvoid getSelectionRange(AccessibleTextEvent e) {
               Point sel = text.getSelection();
               e.offset = sel.x;
               e.length = sel.y - sel.x;
           }
        });
       
        getAccessible().addAccessibleControlListener (new AccessibleControlAdapter() {
           publicvoid getChildAtPoint (AccessibleControlEvent e) {
               Point testPoint = toControl (e.x, e.y);
               if (getBounds ().contains (testPoint)) {
                  e.childID = ACC.CHILDID_SELF;
               }
           }
          
           publicvoid getLocation (AccessibleControlEvent e) {
               Rectangle location = getBounds ();
               Point pt = toDisplay (location.x, location.y);
               e.x = pt.x;
               e.y = pt.y;
               e.width = location.width;
               e.height = location.height;
           }
          
           publicvoid getChildCount (AccessibleControlEvent e) {
               e.detail = 0;
           }
          
           publicvoid getRole (AccessibleControlEvent e) {
               e.detail = ACC.ROLE_COMBOBOX;
           }
          
           publicvoid getState (AccessibleControlEvent e) {
               e.detail = ACC.STATE_NORMAL;
           }
     
           publicvoid getValue (AccessibleControlEvent e) {
               e.result = getText ();
           }
        });
     
        text.getAccessible ().addAccessibleControlListener (new AccessibleControlAdapter () {
           publicvoid getRole (AccessibleControlEvent e) {
               e.detail = text.getEditable () ? ACC.ROLE_TEXT : ACC.ROLE_LABEL;
           }
        });
     
        arrow.getAccessible ().addAccessibleControlListener (new AccessibleControlAdapter() {
           publicvoid getDefaultAction (AccessibleControlEvent e) {
               e.result = isDropped () ? SWT.getMessage ("SWT_Close") : SWT.getMessage ("SWT_Open");
           }
        });
    }

    在SWT控件中,包含Accessibility功能的控件有:CCombo,CLabel,CTableFolder,StyledText。
    posted on 2006-06-19 17:38 三人行,必有我師焉 閱讀(1984) 評論(4)  編輯  收藏

    評論

    # re: SWT 的易訪問性(Accessibility) 2007-06-07 18:44 qililhjcn
    嗯 這篇文章寫的真不錯 對我幫助很大 我最近也在研究這方面的東西  回復  更多評論
      

    # re: SWT 的易訪問性(Accessibility) 2007-11-21 18:56 Tao
    好文章。請問,那對于Button和List這些空間需要定義Accessibility么?如果我的界面包含的控鍵比較多,是不是要為每個都添加accessibility listener呢?  回復  更多評論
      

    # re: SWT 的易訪問性(Accessibility) 2008-08-28 14:22 帥帥
    我覺得,Button和List都是已經添加accessibility listener的,只有custom widget需要accessibility listener。我想知道的是怎么測試程序啊?難不成自己機器要裝那些殘疾人用的設備才行嗎?  回復  更多評論
      

    # re: SWT 的易訪問性(Accessibility) 2009-02-20 16:20 belon
    很好;  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    GitHub |  開源中國社區 |  maven倉庫 |  文件格式轉換 
    主站蜘蛛池模板: 亚洲人成网站在线播放影院在线| 美女视频黄a视频全免费| 国产精品无码素人福利免费| 97se亚洲综合在线| 青青草无码免费一二三区| 亚洲精品少妇30p| 中文字幕在线免费视频| 在线精品亚洲一区二区三区| 国产精品青草视频免费播放| 亚洲国产a级视频| yellow视频免费看| 亚洲精品成人无码中文毛片不卡| 国产一级婬片A视频免费观看| 国产成人亚洲精品影院| 波多野结衣中文字幕免费视频| 日韩精品一区二区亚洲AV观看| 亚洲一区二区在线免费观看| 亚洲手机中文字幕| 免费看片免费播放| 无遮挡国产高潮视频免费观看| 精品亚洲一区二区三区在线观看| 两性色午夜视频免费网| 亚洲天堂在线播放| 中文字幕av无码无卡免费| 亚洲国产区男人本色| 亚洲国产成人精品女人久久久 | 亚洲精品123区在线观看| 免费观看男人免费桶女人视频| 日本亚洲中午字幕乱码| 丝袜熟女国偷自产中文字幕亚洲| 人人揉揉香蕉大免费不卡| 亚洲一级免费视频| 亚洲AV无码乱码精品国产| 国产婷婷成人久久Av免费高清| 亚洲妓女综合网99| 亚洲AV无码一区二区三区国产| 毛片在线全部免费观看| 亚洲AV一二三区成人影片| 亚洲黄黄黄网站在线观看| 222www免费视频| 深夜A级毛片视频免费|