Я разрабатываю графический интерфейс JavaFX, в котором есть несколько сплитпанов, встроенных внутри друг друга. Я хочу иметь возможность сбросить позиции разделителей до их начальных значений, если пользователь выбирает опцию для сброса представления. Проблема заключается в том, что пользователь должен несколько раз щелкнуть по опции просмотра сброса, чтобы полностью сбросить позиции разделителя. Выполнение его однажды сбрасывает разделители одной ориентации, но не разделители противоположной ориентации.JavaFX Splitpane Inside of Splitpane Set Divider Positions
Вот пример проблемы. Перетащите ползунки, а затем нажмите кнопку «Reset View» в верхней части окна:
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);
}
});
}
Я пытался добавить в таймер задержки для каждого ползунка, который фиксирует проблему, но он чувствует, как kludgey решение. Любые идеи, если есть лучший подход?
Честно говоря, это решение работает отлично, и это не похоже на kludgey. Я просто тестировал его на Linux с помощью JavaFX 8, и он работает намного лучше, чем мое первоначальное решение использовать таймеры для выполнения нескольких макетов. –