我有一个使用JavaFX编写的应用程序,其中包含一个SplitPane。我想要禁用SplitPane上的Divider,这样在应用程序运行时就不可能改变其位置。我该如何做呢?
我有一个使用JavaFX编写的应用程序,其中包含一个SplitPane。我想要禁用SplitPane上的Divider,这样在应用程序运行时就不可能改变其位置。我该如何做呢?
这方面没有API可用,所以一旦场景显示出来,我们必须使用查找函数通过id找到节点。在这种情况下,Divider
的ID为:split-pane-divider
。
一旦我们找到节点,我们将其设置为不接受鼠标事件的透明状态:
@Override
public void start(Stage primaryStage) {
final SplitPane splitPane = new SplitPane();
splitPane.setOrientation(Orientation.HORIZONTAL);
splitPane.setDividerPositions(new double[]{0.5});
splitPane.getItems().add(new StackPane(new Label("Left")));
splitPane.getItems().add(new StackPane(new Label("Right")));
Scene scene = new Scene(splitPane, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
splitPane.lookupAll(".split-pane-divider").stream()
.forEach(div -> div.setMouseTransparent(true) );
}
以上方法对我都无效。我已找到一个解决方案,它对我很有效:
该代码适用于当您的分割窗格位于中间且只有一个分隔符的情况,因此分隔符的位置设置为0.5
。如果您不知道分隔符的位置,可以通过divider.getPosition();
来获取。
Divider divider = splitPane.getDividers().get(0);
divider.positionProperty().addListener(new ChangeListener<Number>()
{
@Override
public void changed( ObservableValue<? extends Number> observable, Number oldvalue, Number newvalue )
{
divider.setPosition(0.5);
}
});
initialize()
方法中。<SplitPane dividerPositions="0.5" mouseTransparent="true" prefHeight="652.0" prefWidth="858.0">
lookup
。 - José Pereda