[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-openjfx-dev
Subject: A consumed event is being delivered to handler, that's a bug right?
From: John Hendrikx <john.hendrikx () gmail ! com>
Date: 2023-05-28 10:05:19
Message-ID: eadbb0b2-985f-4a58-e835-5e931c166864 () gmail ! com
[Download RAW message or body]
When I add an onKeyPressed event handler that consumes all keys, and a
EventType.ROOT handler that monitors events, this 2nd handler still sees
KEY_PRESSED events which are consumed. Note the 3rd line in the output
where a consumed = true event is being delivered.
Output:
KeyPressedHandler KeyEvent [source = javafx.scene.Scene@36dbf594, target
= Button@5dd3d27e[styleClass=button]'111', eventType = KEY_PRESSED,
consumed = false, character = , text = f, code = F]
Main KeyEvent [source = javafx.scene.Scene@36dbf594, target =
Button@5dd3d27e[styleClass=button]'111', eventType = KEY_PRESSED,
consumed = false, character = , text = f, code = F]
RootHandler KeyEvent [source = javafx.scene.Scene@36dbf594, target =
Button@5dd3d27e[styleClass=button]'111', eventType = KEY_PRESSED,
consumed = true, character = , text = f, code = F]
RootHandler KeyEvent [source = javafx.scene.Scene@36dbf594, target =
Button@5dd3d27e[styleClass=button]'111', eventType = KEY_TYPED, consumed
= false, character = f, text = , code = UNDEFINED]
RootHandler KeyEvent [source = javafx.scene.Scene@36dbf594, target =
Button@5dd3d27e[styleClass=button]'111', eventType = KEY_RELEASED,
consumed = false, character = , text = f, code = F]
Code:
public static class App extends Application {
@Override
public void start(Stage primaryStage) {
Button button1 = new Button("111");
HBox hBox = new HBox();
hBox.getChildren().addAll(button1);
Scene scene = new Scene(hBox, 300, 300);
scene.addEventHandler(KeyEvent.KEY_PRESSED, e -> {
System.out.println("KeyPressedHandler " + e);
});
scene.addEventHandler(EventType.ROOT, e -> {
if(e instanceof KeyEvent) {
System.out.println("RootHandler " + e);
}
});
scene.setOnKeyPressed(e -> {
System.out.println("Main " + e);
e.consume();
});
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void start(String[] args) {
App.launch(args);
}
}
--John
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic