如何将gwt复合窗口小部件组合为一个更改事件

时间:2009-05-26 21:52:21

标签: gwt

如果我有一个GWT复合小部件,其中包含三个文本框,例如SSN,我需要在整个小部件丢失焦点时触发更改事件,而不是从单个文本框中删除如何执行此操作?< / p>

3 个答案:

答案 0 :(得分:1)

如果只想在整个窗口小部件失去焦点时(而不是文本框)发生事件,则将窗口小部件的顶层设为FocusPanel,并公开它为您提供的事件。

答案 1 :(得分:0)

您需要在复合材料上实施观察者模式,并且每次都会触发新的通知:

  • 焦点在特定文本框中丢失AND
  • 焦点未转移到任何其他文本框。

答案 2 :(得分:0)

你不能使用计时器吗?在从文本框中丢失焦点时,启动一个5ms(或小的东西)计时器,当它命中时,将检查所有3个TextBox实例的焦点。如果没有焦点,则手动通知观察者。如果一个人有焦点,什么也不做。

将它放在Composite类中:

private Map<Widget, Boolean> m_hasFocus = new HashMap<Widget, Boolean>();

然后将其添加到每个TextBox实例中:

new FocusListener() {
  public void onFocus(Widget sender) {
    m_hasFocus.put(sender, Boolean.TRUE);
  }

  public void onLostFocus(Widget sender) {
    m_hasFocus.put(sender, Boolean.FALSE);
    new Timer() {
      public void run() {
        for (Boolean bool : m_hasFocus.values()) {
          if (bool) { return; }
        }
        notifyObservers();
      }
    };
  }
};