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