0


我想将我的 SplitPane 分隔器设置为“特定”起始位置,因此考虑到窗口的组件。
有一个固定大小的 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 为空。

4

1 回答 1

0

所以问题是一切都还没有加载,所以要解决这个问题,你可以在你的 Main 启动函数的末尾调用它,如下所示

主要的:

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);
            }
        });
    }
}

我不知道这是否有效,因为我没有您所说的“其他组件”,所以让我知道这是否有效,这两种方式对我来说都是一样的

于 2019-01-10T16:20:10.547 回答