2010-09-07 55 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