JavaFX 2.0 SplitPane больше не работает должным образом

После обновления до JavaFX 2.0 b36 (SDK для Windows (32-разрядная версия) + подключаемый модуль 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);

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

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


person pmoule    schedule 26.07.2011    source источник


Ответы (1)


Чтобы 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);
    }
}
person pmoule    schedule 30.07.2011