群组鼠标事件未触发Javafx

时间:2016-12-13 05:39:45

标签: java javafx-8

我有一个非常简单的问题。我搜索了javafx event页面。可能是我忽略了一些细节。无论如何,如果你查看我的代码,一切正常。

但是,如果我将布局包装在一个组中并将其添加到场景中而不是直接添加布局,则layout和contentPane似乎都会停止检测鼠标事件。事件该集团,g,没有得到鼠标事件。

这种行为是正常的吗?为什么呢?

非常感谢有关此主题的任何帮助。

package mouseeventtest;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;


public class MouseEventTest extends Application {
    BorderPane layout;

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Test Mouse Event");

        layout = new BorderPane();
        Pane contentPane = new StackPane();
        layout.setCenter(contentPane);

        layout.setOnMousePressed(e ->{ System.out.println("layout.setOnMousePressed..."); });
        contentPane.setOnMousePressed(e -> { System.out.println("contentPane.setOnMousePressed..."); });

        //Group g =  new Group(layout);
        //g.setOnMousePressed(e -> { System.out.println("g.setOnMousePressed ..."); }); 
        //Scene scene = new Scene(g, 800, 800, Color.WHITE);
        Scene scene = new Scene(layout, 800, 800, Color.WHITE);

        scene.setOnMousePressed(e -> { System.out.println("scene.setOnMousePressed..."); });
        primaryStage.setScene(scene);
        primaryStage.show();
        primaryStage.show();
    }

     /**
      * @param args the command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }

 }

1 个答案:

答案 0 :(得分:1)

GroupRegion作为场景的根时,GroupRegion的大小(显然)存在差异。 layout.setPrefSize(800, 800); 的大小足以容纳其内容;而{{1}}的大小适合整个场景。由于场景图中基本上没有内容(除了某些容器​​),因此该组的首选大小计算为零。因此,没有任何东西可以接收任何鼠标事件。

如果您为内容添加了一些尺寸,例如

{{1}}

然后您将按预期在组中看到鼠标事件。