javaFXでsceneとcontrollに同じイベントを登録していた場合sceneの方のみが起動します。
私はAnchorPaneにpolygonを入れ、両方のMouseClickedに処理を記入しています。
AnchorPane上でマウスをクリックした場合、AnchorPaneのイベントが起動します。
しかし、Polygon上でマウスをクリックしてもAnchorPaneのイベントが起動してしまいます。
これはどのようにすれば解決しますか
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/15 08:18
回答1件
0
ベストアンサー
非常に単純なサンプルを書いてみました。setOnMouseClicked(またはFXML上でOn Mouse Clicked)でハンドラーを登録していると仮定しています。以下のようにするとマウスクリックの場所によってそれぞれ期待通りのハンドラーが起動されるのが観察できると思います。
- Polygon(黒い三角形)上でclickするとPolygonに対して発生
- AnchorPane上のPolygon以外でclickするとAnchorPaneに対して発生
- AnchorPane以外の場所(Label上など)でclickするとSceneに対して発生
さて、あなたのアプリケーションは何かが違っているはずです。それは何なのかご質問の内容からではわかりませんが下記のサンプルとの違いについて考えてみてください。
(下記はNode階層をハードコードしていますが、FXML上に記述しても同様の動作となります。)
java
1import javafx.application.Application; 2import javafx.scene.Scene; 3import javafx.scene.control.Label; 4import javafx.scene.input.MouseEvent; 5import javafx.scene.layout.AnchorPane; 6import javafx.scene.layout.VBox; 7import javafx.scene.shape.Polygon; 8import javafx.stage.Stage; 9//Scene 10// +- VBox 11// +- AnchorPane 12// | +- Polygon 13// +- Label 14public class MouseTest extends Application { 15 @Override 16 public void start(Stage primaryStage) throws Exception { 17 // Anchor生成 18 AnchorPane anchor = new AnchorPane(); 19 anchor.setOnMouseClicked(this::mouseClicked); 20 anchor.setPrefSize(200, 200); 21 // Polygon生成 22 double[] points = { 0, 0, 180, 0, 180, 180 }; 23 Polygon poly = new Polygon(points); 24 poly.setOnMouseClicked(this::mouseClicked); 25 AnchorPane.setTopAnchor(poly, 10.0); 26 AnchorPane.setLeftAnchor(poly, 10.0); 27 anchor.getChildren().add(poly); 28 // Label生成 29 Label label = new Label("LABEL"); 30 // VBox生成 31 VBox vbox = new VBox(anchor, label); 32 // Scene生成 33 Scene scene = new Scene(vbox); 34 scene.setOnMouseClicked(this::mouseClicked); 35 primaryStage.setScene(scene); 36 primaryStage.show(); 37 } 38 39 void mouseClicked(MouseEvent ev) { 40 System.out.printf("source = %s\n", ev.getSource()); 41 ev.consume(); 42 } 43 44 public static void main(String[] args) { 45 Application.launch(args); 46 } 47}
投稿2016/12/14 12:02
総合スコア18392
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/15 08:22
2016/12/15 09:29
2016/12/15 09:40
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。