对话框内的gwt tabindex

时间:2010-09-07 00:14:38

标签: gwt popup tabindex dialog

在我的gwt应用程序中,在某些屏幕上,我创建了一个带有输入表单的对话框。我希望能够使用tabindex属性,但只能在该对话框中使用。 (即:仅循环该对话框的第一个到最后一个字段)现在,如果我在选择最后一个字段时按Tab键,焦点将移动到恰好是对话框后面的项目的第一个选项卡索引(设置为玻璃)。这非常令人讨厌,因为现在必须多次标记,直到焦点返回到第一个对话框字段。将对话框设置为模态更糟糕,因为只要在对话框外部选项卡,tab键就会被忽略,因为对话框外的对象不再接收键盘事件(无法跳出!)。 我唯一的选择是监听tab键并手动处理Tab键?只要它返回到我的对话框而不必遍历其下的所有元素,我就可以在我的应用程序之外移动到标题栏(例如)。

2 个答案:

答案 0 :(得分:3)

嗯,迟到总比没有好!我有同样的问题。解决方案实际上非常简单。

假设您有一个继承自Composite的对话框,其中包含用于数据输入和按钮的小部件。主窗口还包含一些UI小部件,如输入字段和一些按钮。您为此主窗口设置了Tab键顺序。按下按钮以显示对话框时,请在主窗口(setTabIndex(-1))上设置禁用Tab键顺序的每个控件。

对于新对话框,请在构造函数中注册以下代码:

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

然后创建两个适当调用的方法setTabOrder()clearTabOrder()。似乎GWT与具有Tab键顺序的多个窗口混淆。您可以通过在显示/隐藏每个对话框窗口时动态创建Tab键顺序来结束混淆。

答案 1 :(得分:1)

好吧,经过近一个月没有答案,我决定采用手动标签键处理。 像魅力一样工作,但它现在忽略了标签周期中的网址栏(我很好)。 我用这篇博文来开始: http://albertattard.blogspot.com/2009/11/capturing-tab-key-in-gwt-textarea.html 我只是在对话框的根部添加了一个焦点面板。