<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 評(píng)論 :: 0 Trackbacks
    最近由于項(xiàng)目的需要,研究了一下SWT的Accessibility。關(guān)于Accessibility,這是一個(gè)很難纏的search,給殘疾人用的東東,正常人基本上不會(huì)用到,網(wǎng)上文章少之又少。可以查閱到的一篇來(lái)自于IBM developerWorks的文章:使用 Eclipse 創(chuàng)建易訪(fǎng)問(wèn)的應(yīng)用程序:介紹

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


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

    以下是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。

    評(píng)論

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

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

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

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


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    GitHub |  開(kāi)源中國(guó)社區(qū) |  maven倉(cāng)庫(kù) |  文件格式轉(zhuǎn)換 
    主站蜘蛛池模板: 91久久精品国产免费直播| 亚洲日本久久一区二区va| 亚洲一级片免费看| 亚洲AV伊人久久青青草原| 日韩免费无码一区二区视频| 成人五级毛片免费播放| 国产片AV片永久免费观看| 1000部拍拍拍18勿入免费视频软件| 国产裸体美女永久免费无遮挡 | 国产色爽免费视频| 免费在线看v网址| 青青久在线视频免费观看| 最近2019中文免费字幕| 国产高清在线精品免费软件| 国产麻豆免费观看91| 亚洲成a人一区二区三区| 亚洲综合色在线观看亚洲| 中文字幕不卡亚洲 | 亚洲国产免费综合| 国产亚洲精品看片在线观看| 亚洲片国产一区一级在线观看| 最新精品亚洲成a人在线观看| 亚洲无线码在线一区观看| 亚洲AV无码一区二区二三区入口| 内射少妇36P亚洲区| 国产亚洲国产bv网站在线| 亚洲精品伦理熟女国产一区二区| 美女啪啪网站又黄又免费| 老司机精品免费视频| 久久久久久久岛国免费播放| 91手机看片国产永久免费| 免费高清av一区二区三区| 免费人成视频x8x8入口| 亚洲午夜激情视频| 亚洲av无码一区二区乱子伦as| 亚洲国产日韩女人aaaaaa毛片在线| 蜜芽亚洲av无码一区二区三区 | 亚洲国产成人精品青青草原| 亚洲av无一区二区三区| 国产在线观看免费av站| 久久国产高潮流白浆免费观看|