Не могли бы вы использовать таймер? При потере фокуса из текстового поля запустите 5 мс (или что-то маленькое) таймер, который при попадании будет проверять фокус на всех 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();
}
};
}
};