我想构建一个javafx应用程序,它包含关于整个场景的3个大列。列应该是可调整大小的,所以我使用了splitpane。我在splitpane中添加了3个borderpane,每个都有相同的首选宽度(场景总宽度为3840,因此每列宽度为1280)。但是当我启动应用程序时,中间边框小于另外两个。它没有在1280宽度上缩放。
那么如何管理splitpane不缩放borderpanes并使用首选宽度?
更新:我找到了一个很好的解决方案,这使得user3249346的解决方案变得动态。添加或删除列后,您可以调用:
ObservableList<SplitPane.Divider> dividers = splitPane.getDividers();
for (int i = 0; i < dividers.size(); i++) {
dividers.get(i).setPosition((i + 1.0) / 3);
}
答案 0 :(得分:2)
我尝试了这个,当我使用三列Splitpane最大化并恢复屏幕时,这可行。 重要的是Platform.runLater
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.SplitPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class SplitPaneTest extends Application {
@Override public void start(Stage stage) {
final SplitPane sp = new SplitPane();
final StackPane sp1 = new StackPane();
Button addColumn = new Button("Add Column");
// Added the below function to set the size dynamically when column is added.
addColumn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
StackPane temp = new StackPane();
temp.getChildren().add(new Button("New Column"));
sp.getItems().add(temp);
int divCount = sp.getDividerPositions().length;
double equalSize = 1.0/(divCount+1);
double divPosValues[] = new double[divCount];
for(int count=1; count<divCount+1; count++) {
divPosValues[count-1] = equalSize*count;
}
sp.setDividerPositions(divPosValues);
}
});
sp1.getChildren().add(addColumn);
final StackPane sp2 = new StackPane();
sp2.getChildren().add(new Button("New Button"));
final StackPane sp3 = new StackPane();
sp3.getChildren().add(new Button("New Button"));
sp.getItems().addAll(sp1, sp2, sp3);
sp.setDividerPositions(0.33f, 0.63f, 0.93f);
Scene scene = new Scene(sp, 400, 400);
stage.setScene(scene);
Platform.runLater(new Runnable() {
@Override
public void run() {
sp.setDividerPositions(0.3f, 0.6f, 0.9f);
}
});
stage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}