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

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

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

    gembin

    OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

    HBase, Hadoop, ZooKeeper, Cassandra

    Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

    There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

    About Me

     

    SWT Accessibility

    最近由于項目的需要,研究了一下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 2008-03-30 02:13 gembin 閱讀(696) 評論(0)  編輯  收藏 所屬分類: SWT

    導航

    統計

    常用鏈接

    留言簿(6)

    隨筆分類(440)

    隨筆檔案(378)

    文章檔案(6)

    新聞檔案(1)

    相冊

    收藏夾(9)

    Adobe

    Android

    AS3

    Blog-Links

    Build

    Design Pattern

    Eclipse

    Favorite Links

    Flickr

    Game Dev

    HBase

    Identity Management

    IT resources

    JEE

    Language

    OpenID

    OSGi

    SOA

    Version Control

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    free counters
    主站蜘蛛池模板: 麻豆国产VA免费精品高清在线 | 91视频免费网址| 国产专区一va亚洲v天堂| 日本亚洲国产一区二区三区| 风间由美在线亚洲一区| 久久WWW色情成人免费观看| 亚洲国产成人精品久久| 青青青国产在线观看免费网站 | 亚洲性色精品一区二区在线| 24小时免费直播在线观看| 香蕉大伊亚洲人在线观看| 日韩精品视频免费网址| 国产亚洲女在线线精品| 免费h成人黄漫画嘿咻破解版| 九九视频高清视频免费观看| 久久综合亚洲色HEZYO国产| a级日本高清免费看| 亚洲av综合avav中文| 1000部啪啪毛片免费看| 亚洲视频无码高清在线| 免费日本黄色网址| 好吊色永久免费视频大全 | 久久精品国产99国产精品亚洲| 国产大片线上免费观看| 亚洲Av永久无码精品黑人| 亚洲精品线路一在线观看| 日韩精品无码免费专区午夜| 亚洲视频一区网站| 天天看片天天爽_免费播放| 男女超爽视频免费播放| 亚洲一区无码中文字幕| 91精品国产免费入口| 亚洲中文字幕无码中文字| 四虎影院永久免费观看| 黄色片免费在线观看| 亚洲精品美女网站| 相泽亚洲一区中文字幕| 免免费国产AAAAA片| 一级a性色生活片久久无少妇一级婬片免费放 | 99久久人妻精品免费一区| 亚洲粉嫩美白在线|