3

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

4

2 回答 2

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 与具有标签顺序的多个窗口混淆了。您可以通过在显示/隐藏每个对话框窗口时动态创建选项卡顺序来结束混乱。

于 2011-09-11T01:54:59.703 回答
1

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

于 2010-10-03T16:10:23.027 回答