JavaFX 2.0 SplitPane больше не работает должным образом - PullRequest
0 голосов
/ 26 июля 2011

После обновления JavaFX 2.0 b36 (SDK для Windows (32Bit) + плагин Netbeans) из предыдущей версии JavaFX 2.0 элемент управления SplitPane больше не работает должным образом.

  1. Разделитель не может быть перемещен
  2. Положение делителя не соответствует ожидаемому
  3. Размеры содержащихся сторон не соответствуют ожидаемым

Вот мой пример кода для SplitPane.

public class FxTest extends Application {

    public static void main(String[] args) {
        Application.launch(FxTest.class, args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("SplitPane Test");

        Group root = new Group();
        Scene scene = new Scene(root, 200, 200, Color.WHITE);

        Button button1 = new Button("Button 1");
        Button button2 = new Button("Button 2");

        SplitPane splitPane = new SplitPane();
        splitPane.setPrefSize(200, 200);
        splitPane.setOrientation(Orientation.HORIZONTAL);
        splitPane.setDividerPosition(0, 0.7);
        splitPane.getItems().addAll(button1, button2);

        root.getChildren().add(splitPane);

        primaryStage.setScene(scene);
        primaryStage.setVisible(true);
    }
}

Как вы можете (надеюсь) увидеть, что левая сторона явно меньше, чем правая.

Еще один забавный факт - когда вы меняете ориентацию на ВЕРТИКАЛЬНУЮ

splitPane.setOrientation(Orientation.VERTICAL);

и попробуйте переместить делитель вверх или вниз, чтобы получить консольный вывод «ЗДЕСЬ». Выглядит как тестовый вывод.

В чем проблема с этим?

1 Ответ

3 голосов
/ 30 июля 2011

Чтобы заставить SplitPane работать должным образом, добавьте макет (например, BorderPane) с каждой стороны. Добавьте элементы управления для отображения в каждом из этих макетов. Я думаю, что это должно быть более понятно в документации API!

public class FxTest extends Application {

    public static void main(String[] args) {
        Application.launch(FxTest.class, args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("SplitPane Test");

        Group root = new Group();
        Scene scene = new Scene(root, 200, 200, Color.WHITE);

        //CREATE THE SPLITPANE
        SplitPane splitPane = new SplitPane();
        splitPane.setPrefSize(200, 200);
        splitPane.setOrientation(Orientation.HORIZONTAL);
        splitPane.setDividerPosition(0, 0.7);

        //ADD LAYOUTS AND ASSIGN CONTAINED CONTROLS
        Button button1 = new Button("Button 1");
        Button button2 = new Button("Button 2");

        BorderPane leftPane = new BorderPane();
        leftPane.getChildren().add(button1);

        BorderPane rightPane = new BorderPane();
        rightPane.getChildren().add(button2);

        splitPane.getItems().addAll(leftPane, rightPane);

        //ADD SPLITPANE TO ROOT
        root.getChildren().add(splitPane);

        primaryStage.setScene(scene);
        primaryStage.setVisible(true);
    }
}
...