【问题标题】:JavaFX Splitpane Inside of Splitpane Set Divider Positions拆分窗格内的 JavaFX 拆分窗格设置分隔符位置
【发布时间】:2014-11-16 19:37:21
【问题描述】:

我正在设计一个 JavaFX GUI,其中嵌入了多个拆分窗格。如果用户选择重置视图的选项,我希望能够将分隔线位置重置为其初始值。问题是用户必须多次单击重置视图选项才能完全重置分隔线位置。这样做一次会重置相同方向的分隔线,但不会重置相反方向的分隔线。

这是一个问题的例子。拖动滑块,然后单击窗口顶部的“重置视图”按钮:

public void start(Stage stage) throws Exception
{
    SplitPane mainWindow = new SplitPane();
    SplitPane leftPanel = new SplitPane();
    SplitPane rightPanel = new SplitPane();

    Button resetViewButton = new Button("Reset View");
    VBox mainFrameVBox = new VBox();
    Scene scene = new Scene(mainFrameVBox, 500, 500);

    mainWindow.setOrientation(Orientation.HORIZONTAL);
    mainWindow.getItems().addAll(leftPanel, rightPanel);
    mainWindow.setDividerPosition(0, 0.125);

    leftPanel.setOrientation(Orientation.VERTICAL);
    leftPanel.getItems().addAll(new VBox(new Text("Test 1")), new VBox(new Text("Test 2")));
    leftPanel.setDividerPosition(0, 0.5);

    rightPanel.setOrientation(Orientation.VERTICAL);
    rightPanel.getItems().addAll(new VBox(new Text("Test 3")), new VBox(new Text("Test 4")));
    rightPanel.setDividerPosition(0, 0.85);

    mainFrameVBox.getChildren().addAll(resetViewButton, mainWindow);

    VBox.setVgrow(mainWindow, Priority.ALWAYS);

    stage.setScene(scene);
    stage.show();

    resetViewButton.setOnAction(new EventHandler<ActionEvent>()
    {
       @Override
       public void handle(ActionEvent event)
       {
           mainWindow.setDividerPosition(0, 0.125);
           leftPanel.setDividerPosition(0, 0.5);
           rightPanel.setDividerPosition(0, 0.85);
       }
    });
}

我尝试为每个滑块添加一个延迟计时器,这解决了问题,但感觉像是一个笨拙的解决方案。如果有更好的方法有什么想法吗?

【问题讨论】:

    标签: javafx divider splitpane


    【解决方案1】:

    这对我有用。仍然有点笨拙的 IMO。

        resetViewButton.setOnAction((ActionEvent event) -> {
            mainWindow.setDividerPosition(0, 0.125);
            leftPanel.setDividerPosition(0, 0.5);
            leftPanel.layout();
            rightPanel.setDividerPosition(0, 0.85);
            rightPanel.layout();
        });
    

    似乎需要多次通过才能使嵌入的 SplitPanes 完成布局。我还尝试使用 Platform.runLater() 将分隔线定位命令放在事件队列中,如几个类似问题中所述,但这似乎不可靠。这在使用 JavaFX 8 的 Windows 上一直有效。

    【讨论】:

    • 老实说,这个解决方案工作得很好,而且看起来并不笨拙。我刚刚在 Linux 上使用 JavaFX 8 对其进行了测试,它比我使用计时器执行多个布局的原始解决方案效果更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多