Java 如何在GWT中全局修改/访问小部件?

Java 如何在GWT中全局修改/访问小部件?,java,gwt,widget,Java,Gwt,Widget,我昨天才开始使用GWT,所以可能我没有使用正确的机制来解决这个问题。因此,我将尝试准确地解释我正在尝试做什么(用一个简单的问题)以及我提出的两个解决方案来解决这个问题 问题: 记住一个可以通过其他小部件更新的索引。让我们用焦点来表示它 [button 1] [button 2] [button A] [button 3] 按钮[1..3]和[A]不在同一个类中,需要使用DOM查找使用id的元素。原因是这两个视图需要正交 我们可以使用向上/向下键将焦点从按钮1移动到按钮3 如果我们在按

我昨天才开始使用GWT,所以可能我没有使用正确的机制来解决这个问题。因此,我将尝试准确地解释我正在尝试做什么(用一个简单的问题)以及我提出的两个解决方案来解决这个问题

问题

记住一个可以通过其他小部件更新的索引。让我们用焦点来表示它

[button 1]
[button 2]     [button A]
[button 3]
  • 按钮[1..3]和[A]不在同一个类中,需要使用DOM查找使用id的元素。原因是这两个视图需要正交
  • 我们可以使用向上/向下键将焦点从按钮1移动到按钮3
  • 如果我们在按钮[1..3]上并向右按,则转到按钮A
  • 如果我们在按钮A上并按下左键,我们将转到先前聚焦的按钮
我们要做的是在按下右键时保存或设置焦点索引

解决方案1:全局变量

我通常不喜欢全局变量,但在某些情况下它很方便。例如,通过使用javascript中全局定义的字典(dictionary.getDictionary),在这种情况下,我可以使用“焦点事件”将当前索引保存在其中

因此,在按键事件中,当left将被激发时,我将只读取字典中的值

我还没有测试,但我认为它应该可以工作

解决方案2:使用元素设置值

Element element = DOM.getElementById("button id A");
element.<setFocusLeftKey>("button id [1..3]");
Element=DOM.getElementById(“按钮id A”);
元素。(“按钮id[1..3]”;
在这里,我想实现的只是在“onFocus”事件中,我只需设置该按钮的值

  • 那么,是否可以使用元素强制转换/查找对象?我认为如果没有简单的方法,可能是因为不推荐
  • 有没有更简单的方法/其他方法来实现这一点

那么,有什么想法或解决方案吗

提前谢谢


另外,我还没有找到更好的标题,因此如果有任何建议,请将其放在评论中,我会更新它。

在GWT中使用ID肯定不是建议的方法。你说你需要这个机制来保持你的观点彼此正交。这是很高尚的,但是在GWT中,您可以通过使用另一个资源(在中实现的EventBus)来实现,该资源将不同的组件相互隐藏。事实上,我认为通过ID查找元素会强烈地耦合这两个视图,而且很难闻

启用EventBus后,您只需创建并触发自定义事件,让视图(或者更好的是,它们的演示者)彼此通信。例如,这里可以有:
NavigateRightFromButtonsEvent
navigagTeleftffromButtonna
事件

但是,根据应用程序的大小(或者作为第一个实验),您可以决定将两个视图耦合起来。在这种情况下,只需将按钮列表的视图传递给按钮A的视图,反之亦然。这并不比依赖全局ID更糟糕


无论您选择哪种机制(事件总线或将视图连接在一起),现在都应该可以直接访问要突出显示的小部件的实例。要集中精力,只需调用
setFocus(true)

感谢您的建议,我将开始查看事件总线,了解如何集成它,以及它是否可以作为解决方案工作。对于“ID耦合”,我不认为它实际上是一个如此糟糕的设计。我唯一的问题是它不是编译时。