我想将我的SplitPane分隔符设置为“特定”的起始位置,以便考虑到窗口的组成部分。
有一个固定的Starter大小的TableView,但是窗口大小可以不同。因此,我想在开始时设置分隔线的位置,以便表格完全可见,并且在分隔线的旁边。
到目前为止,我在public void initialize()
中有以下代码:
控制器:
@FXML
SplitPane splitPane;
@FXML
TreeTableView treeTable;
public void initialize() {
getStage().addEventHandler(WindowEvent.WINDOW_SHOWN, new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
double tableWidth = treeTable.getWidth();
double stageWidth = getStage().getWidth();
splitPane.setDividerPositions(tableWidth / stageWidth);
}
});
}
FXML:
<SplitPane fx:id="splitPane">
<items>
<TreeTableView fx:id="treeTable" prefWidth="280">
<!-- table -->
</TreeTableView>
<AnchorPane fx:id="anchorPane">
<!-- anchor pane -->
</AnchorPane>
</items>
</SplitPane>
但是它不起作用,因为此时Stage为空。
答案 0 :(得分:0)
所以问题是一切还没有加载,因此要解决此问题,您可以在Main start函数的末尾调用它,如下所示:
主要:
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
FXMLLoader loader = new FXMLLoader(getClass().getResource("/Sample.fxml"));
Scene scene = new Scene(loader.load());
primaryStage.setScene(scene);
Controller controller = loader.getController();
controller.setStartingPosition(primaryStage);
primaryStage.show();
}
public static void main(String[] args) { launch(args); }
}
控制器:
public class Controller {
public SplitPane splitPane;
public TreeTableView treeTable;
public AnchorPane anchorPane;
public void setStartingPosition(Stage stage){
stage.addEventHandler(WindowEvent.WINDOW_SHOWN, new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
double tableWidth = treeTable.getWidth();
double stageWidth = stage.getWidth();
splitPane.setDividerPositions(tableWidth / stageWidth);
}
});
}
}
由于我没有您要说的“其他组件”,因此我无法确定它是否有效,因此请告诉我,如果这两种方法对我来说看起来都一样