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

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

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

    Feeling

        三人行,必有我?guī)熝?/p>

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

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


    Eclipse 擁有一個包含 API:org.eclipse.swt.accessibility 的易訪問性包。Eclipse 3.0 易訪問性特征是基于 MSAA 1.3 程序設(shè)計模型所提供的功能。您可以將 Eclipse 中的 Accessible 對象聯(lián)系到每個控件上,并且 org.eclipse.swt.accessibility 接口中的方法集對應(yīng) 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相關(guān)代碼,只能總結(jié)一部分規(guī)律:
    1. 一般的復(fù)雜控件是沒有必要定義Accessibility的。
    2. 如果是模擬實現(xiàn)一個比較簡單的基本控件,比如Combo,Label,Spinner等,有必要定義Accessibility。  
    3. 所有的自定義控件都要實現(xiàn)AccessibleControlListener接口。
    4. 所有的包含文本框的控件都要實現(xiàn)AccessibleTextListener接口。
    5. 設(shè)置AccessibleListener的getHelp( )最好是給控件加上Tooltip,因為Wineyes這些屏幕閱讀器閱讀都是根據(jù)Tooltip,無視getHelp( )的設(shè)置。
    6. 設(shè)置AccessibleListener的getName( ),一般來說,可以設(shè)置為這個控件相關(guān)聯(lián)的Label的Text或者該控件上的某部分文字,自己斟酌考慮設(shè)置。
    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。

    評論

    # re: SWT 的易訪問性(Accessibility) 2007-06-07 18:44 qililhjcn
    嗯 這篇文章寫的真不錯 對我?guī)椭艽?我最近也在研究這方面的東西  回復(fù)  更多評論
      

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

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

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


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


    網(wǎng)站導(dǎo)航:
     
    GitHub |  開源中國社區(qū) |  maven倉庫 |  文件格式轉(zhuǎn)換 
    主站蜘蛛池模板: 亚洲高清国产拍精品熟女| 亚洲另类小说图片| 一级看片免费视频| 国产在线观看免费不卡| 亚洲色偷精品一区二区三区| 手机在线看永久av片免费| 亚洲激情视频网站| 免免费国产AAAAA片| 亚洲高清有码中文字| 午夜a级成人免费毛片| 色噜噜的亚洲男人的天堂| 国产亚洲精品免费| 久久一区二区免费播放| 亚洲不卡中文字幕无码| 最近中文字幕免费mv在线视频| 亚洲国产精品久久久久秋霞影院 | 国产成人免费一区二区三区| 精品久久久久亚洲| 亚洲色自偷自拍另类小说| 日韩免费无码视频一区二区三区| 亚洲黄色网站视频| 成人免费777777| 免费很黄无遮挡的视频毛片| 亚洲啪啪AV无码片| 99在线精品免费视频九九视 | 黄色a三级免费看| 亚洲AV永久无码区成人网站 | 免费a级毛片无码av| 中文字幕成人免费高清在线视频| 亚洲国语精品自产拍在线观看| 青青青国产在线观看免费网站| 亚洲精华国产精华精华液网站| 久久精品国产精品亚洲人人 | 亚洲精品456在线播放| 日本视频免费在线| 三年在线观看免费观看完整版中文 | 久久WWW免费人成—看片| 亚洲视频一区在线| 亚洲国产精品成人久久蜜臀| 91久久青青草原线免费| 立即播放免费毛片一级|