JavaFX的 - SplitPane,调整大小和比例(JavaFX - SplitPane, r

2019-07-21 06:41发布

我怎样才能实现整个SplitPane的比例大小?

public class JfxSplitPaneTest extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        SplitPane split = new SplitPane();
        StackPane child1 = new StackPane();
        child1.setStyle("-fx-background-color: #0000AA;");
        StackPane child2 = new StackPane();
        child2.setStyle("-fx-background-color: #00AA00;");
        StackPane child3 = new StackPane();
        child3.setStyle("-fx-background-color: #AA0000;");
        split.getItems().addAll(child1, child2, child3);
        //split.setDividerPositions(0.1f, 0.6f, 0.9f)
        stage.setScene(new Scene(split, 400, 300));
        stage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

启动程序:

设置分隔怎么喜欢他们:

使窗口宽度非常小(我继续,并使其更小,无图):

调整回来,并观察分频器既不是如何设置他们也不知道怎样,他们计划开始的时候。

这样做可以更接近我所期望的:

    child1.setMinWidth(Region.USE_PREF_SIZE)
    child1.setPrefWidth(100)
    child2.setMinWidth(Region.USE_PREF_SIZE)
    child2.setPrefWidth(200)
    child3.setMinWidth(Region.USE_PREF_SIZE)
    child3.setPrefWidth(300)

不同之处在于分隔是initally在错误的位置(直到我调整SplitPane,1px的就足够了)和收缩窗口宽度时,除法器是内部组件。

我怎样才能使这项工作吗?

Answer 1:

尝试改变监听器添加到stage.widthProperty()stage.heightProperty()。 并称之为:

    split.setDividerPositions(0.1f, 0.6f, 0.9f)


Answer 2:

尝试像AS3Boyan说来设置除数

split.setDividerPositions(0.1f, 0.6f, 0.9f)

并补充一点:

我怎样才能避免SplitPane来调整,当调整窗口大小的窗格中的一个?



Answer 3:

经验法则是使用setDividerPositionsPlatform.runLater在触发resize事件。

你可能想用默认的比例开始,让用户改变这个比例,并保持这一比例无论它是什么时,有一个resize事件。 让我们考虑一个25/75垂直FX splitPane在某些stage

splitPane.setDividerPositions(0.25f, 0.75f);
stage.heightProperty().addListener((obs, oldVal, newVal) -> {
    double[] positions = splitPane.getDividerPositions(); // reccord the current ratio
    Platform.runLater(() -> splitPane.setDividerPositions(positions)); // apply the now former ratio
});


文章来源: JavaFX - SplitPane, resize & proportions