ボタンを押したときにマウスの座標などがeventから取れれば
setOnMouseClicked
等のMouseEvent
なら座標が入っていますが、ActionEvent
にはありません。
なぜならOnAction
はマウスクリックだけではないからです。
キーボードフォーカスがある状態でスペースやエンターでも押せますし、Accelerator(キーボードショートカット)でも押せます。
つまりマウスの乗っているボタン以外も押せてしまうということです。
ダサいですがfire
するときに、フラグで管理するのが確実でしょう。
余計な変数が増えるのもなんなので、UserData
を使ってみました。
Node#setUserData (JavaFX 8)
Node#getUserData (JavaFX 8)
Java
1import javafx.application.Application;
2import javafx.event.ActionEvent;
3import javafx.scene.Scene;
4import javafx.scene.control.Button;
5import javafx.scene.layout.VBox;
6import javafx.stage.Stage;
7
8
9public class Sample extends Application {
10 public static void main(String[] args) { Application.launch(args); }
11
12 private Button btn = new Button("button");
13 private Button fire = new Button("fire");
14
15 @Override public void start(Stage stage) {
16 var pane = new VBox();
17 pane.getChildren().addAll(btn, fire);
18
19 btn.setOnAction(this::button_onAction);
20 fire.setOnAction(this::fire_onAction);
21
22 stage.setScene(new Scene(pane, 300, 200));
23 stage.show();
24 }
25
26 private void button_onAction(ActionEvent e) {
27 var button = (Button) e.getSource();
28 if (button.getUserData() == null) {
29 System.out.println("click");
30 } else {
31 System.out.println("fire");
32 button.setUserData(null); // クリアを忘れずに
33 }
34 }
35
36 private void fire_onAction(ActionEvent e) {
37 btn.setUserData("fire"); // 別に何でもいい
38 btn.fire();
39 }
40}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/03 09:41
2021/09/03 09:56
2021/09/03 10:10
2021/09/03 10:30