java - 如何检测嵌套分割 Pane 分隔线上的鼠标单击事件?

标签 java javafx javafx-8

我正在尝试将鼠标单击监听器添加到分割 Pane 的分隔线。

它可以工作,但是如果此拆分 Pane 中嵌套有一个拆分 Pane ,我将获取子拆分 Pane 的分隔符,而不是获取此拆分 Pane 的分隔符。这是一个工作示例。

如您所见,此处的目的是将单击监听器放在primarySplitPane 的分隔线上。但是,监听器被放置在 secondarySplitPane 的分隔线上。

public class DividerTest extends Application {

    public static void main ( String [] args ) {
        launch ( args );

    }

    @Override
    public void start ( Stage stage ) {

        VBox boxA = new VBox();
        VBox boxB = new VBox();
        VBox boxC = new VBox();

        SplitPane secondarySplitPane = new SplitPane();
        secondarySplitPane.getItems().addAll( boxB, boxC );
        secondarySplitPane.setOrientation( Orientation.VERTICAL );

        SplitPane primarySplitPane = new SplitPane();
        primarySplitPane.getItems().addAll( boxA, secondarySplitPane );

        primarySplitPane.prefWidthProperty().bind( stage.widthProperty() );
        primarySplitPane.prefHeightProperty().bind( stage.heightProperty() );

        Scene scene = new Scene( new Group(), 800, 600 );
        ((Group) scene.getRoot()).getChildren().addAll( primarySplitPane );
        stage.setScene( scene );

        stage.show();

        Node primaryDivider = primarySplitPane.lookup(".split-pane-divider");

        primaryDivider.setOnMouseClicked( ( e ) -> System.out.println ( "Clicked" ) );
    }
}

如何告诉 .lookup 获取正确的分隔符?

最佳答案

您的代码适用于垂直分隔线,但不适用于水平分隔线。这可以通过收集所有分隔线(而不仅仅是第一个分隔线)来简单地解决。如果您想在不同的分隔线上定义不同的操作,您可以检查父级:

Set<Node> dividers = primarySplitPane.lookupAll(".split-pane-divider");

for (Node divider : dividers) {
    if (divider.getParent() == primarySplitPane)
        divider.setOnMouseClicked(e -> System.out.println("Primary Clicked" ));
    else if (divider.getParent() == secondarySplitPane)
        divider.setOnMouseClicked(e -> System.out.println("Secondary Clicked"));

}

关于java - 如何检测嵌套分割 Pane 分隔线上的鼠标单击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47807305/

相关文章:

java - 使用 Spring 3+Hibernate JPA 时发现 JPA 注释类

java - 工具栏 findViewById 返回空指针

java - 尝试从方法返回对象的二维数组时出现 NullPointerException

javafx-2 - 如何在 JavaFX Canvas 上绘制旋转的图像?

javafx - 如何从复选框中完全删除标签?

Java:检查哪些进程绑定(bind)到端口?

java - openorb:如何在ior中发布IP

所有类中对 Controller 的 Java FXML 引用

JavaFX 媒体播放器不播放视频

JavaFX ControlsFX 自动完成 : How to get popup result into a new ObservableList