我正在设计一个 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);
}
});
}
我尝试为每个滑块添加一个延迟计时器,这解决了问题,但感觉像是一个笨拙的解决方案。如果有更好的方法有什么想法吗?