JavaFX - SplitPane,调整大小&比例

时间:2013-03-10 16:04:50

标签: resize javafx splitpane

如何实现整个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);
    }
}

启动程序:

enter image description here

设置分隔符我喜欢它们:

enter image description here

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

enter image description here

调整大小并观察分频器既不是我设置它们也不是它们在程序启动时的方式。

enter image description here

这样做会使它更接近我的期望:

    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)

除了分频器最初处于错误的位置(直到我调整SplitPane的大小,1px就足够了)并且当缩小窗口宽度时,分频器在组件内部。

我怎么能让这项工作好吗?

3 个答案:

答案 0 :(得分:2)

尝试将Change Listener添加到 stage.widthProperty() stage.heightProperty()。并称之为:

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

答案 1 :(得分:0)

尝试设置像AS3Boyan所说的除数

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

并添加:

How can I avoid a SplitPane to resize one of the panes when the window resizes?

答案 2 :(得分:0)

经验法则是在触发调整大小事件时将setDividerPositionsPlatform.runLater一起使用。

您可能希望以默认比率开始,让用户更改该比率,并在发生调整大小事件时保持此比率。让我们考虑一些splitPane中的25/75垂直FX 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
});