Ich möchte ein Ereignis für die folgenden Handler abbrechen. Die Beispielklasse unten zeigt, was ich versuche. Obwohl das Tastenereignis für das Textfeld abgebrochen wird, wird der zweite Handler immer noch aufgerufen. Die Reihenfolge der Handler ist korrekt. Ich kann beweisen, dass Handler1 vor Handler2 aufgerufen wird. In dieser Beispielklasse könnte ich ein Flag verwenden, aber in meiner echten Klasse sind die Handler und das Textfeld getrennt, so dass Flags ein Problem darstellen würden.
public class EventTestTextBox extends TextBox {
public static class Handler1 implements KeyUpHandler {
@Override
public void onKeyUp(KeyUpEvent event) {
if (event.isShiftKeyDown()) {
event.preventDefault();
event.stopPropagation();
((TextBox)event.getSource()).cancelKey();
}
}
}
public static class Handler2 implements KeyUpHandler {
@Override
public void onKeyUp(KeyUpEvent event) {
Window.alert("should not appear if shift-key is down.");
}
}
public EventTestTextBox() {
super.addKeyUpHandler(new Handler1());
super.addKeyUpHandler(new Handler2());
}
}