2010-09-07 54 views
3

在我的gwt應用程序中,在某些屏幕上,我創建了一個帶有輸入窗體的對話框。我希望能夠使用tabindex屬性,但只能在該對話框中使用。 (即:僅對該對話框的首先到最後一個字段進行循環)現在,如果在選擇最後一個字段時按下標籤,焦點將移動到恰好是對話框後面項目的第一個標籤索引(設置爲玻璃)。這非常煩人,因爲現在必須多次選擇標籤,直到焦點返回到第一個對話框字段。將對話框設置爲模態會更糟糕,因爲只要您在對話框外選項卡,Tab鍵就會被忽略,因爲對話框外的對象不再接收鍵盤事件(無法選項卡!)。 是我唯一的選擇來監聽Tab鍵並手動處理Tab鍵。只要返回到我的對話框而無需通過它下面的所有元素,我就可以使用Tab鍵離開我的應用程序並進入url欄(例如)。對話框中的gwt tabindex

回答

1

好吧,經過近一個月沒有答案,我決定去手動標籤鍵處理。 工程就像一個魅力,但它現在忽略標籤週期中的網址欄(罰款由我)。 我用這個博客文章開始: http://albertattard.blogspot.com/2009/11/capturing-tab-key-in-gwt-textarea.html 我只是在我的對話框的根部添加了一個焦點面板。

+0

:你能詳細說明你做了什麼嗎?我和你上面遇到了同樣的問題。 – MindBrain 2013-01-23 22:59:06

3

好吧,遲到比從未更好!我有同樣的問題。解決方案其實很簡單。

比方說,您有一個對話框,它繼承自Composite幷包含用於數據輸入和按鈕的小部件。主窗口還包含一些UI小部件,如輸入字段和一些按鈕。您爲此主窗口設置了Tab鍵順序。當按下按鈕調出對話框時,在主窗口(setTabIndex(-1))上設置禁用製表符順序的每個控件。

對於新的對話框,註冊下面的代碼在構造函數中:

this.addAttachHandler(new AttachEvent.Handler() { 
    @Override 
    public void onAttachOrDetach(AttachEvent event) { 
     if(isAttached()) { 
      setTabOrder(); 
     } else { 
      clearTabOrder(); 
     }    
    } 
}); 

,然後創建兩個方法setTabOrder()clearTabOrder()被稱爲爲宜。看起來,GWT與tab鍵順序混淆了多個窗口。當每個對話窗口顯示/隱藏時,您可以通過動態創建制表符順序來結束混淆。

+0

看起來是一個很好的解決方案;我即將寫一個彈出式數據輸入表單,並開始考慮tabindex。 @Rob Mitchell:你究竟是什麼意思,通過動態創建制表符順序? – Saad 2013-10-23 17:25:58