gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:17:40 25 4
gpt4 key购买 nike

我正在尝试将鼠标单击监听器添加到分割 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com