如何实现整个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)
除了分频器最初处于错误的位置(直到我调整SplitPane的大小,1px就足够了)并且当缩小窗口宽度时,分频器在组件内部。
我怎么能让这项工作好吗?
答案 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)
经验法则是在触发调整大小事件时将setDividerPositions
与Platform.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
});