如果我有一个GWT复合小部件,其中包含三个文本框,例如SSN,我需要在整个小部件丢失焦点时触发更改事件,而不是从单个文本框中删除如何执行此操作?< / p>
答案 0 :(得分:1)
如果只想在整个窗口小部件失去焦点时(而不是文本框)发生事件,则将窗口小部件的顶层设为FocusPanel,并公开它为您提供的事件。
答案 1 :(得分:0)
您需要在复合材料上实施观察者模式,并且每次都会触发新的通知:
答案 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();
}
};
}
};