JavaFX 2.0 SplitPane不再按预期工作

时间:2011-07-26 17:48:14

标签: java javafx-2

自从以前的JavaFX 2.0版本更新到JavaFX 2.0 b36(SDK for Windows(32位)+ Netbeans插件)后,SplitPane控件不再按预期工作。

  1. 无法移动分隔线
  2. 分隔符位置不符合预期
  3. 所包含的边的尺寸不符合预期
  4. 这是我的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);
        }
    }
    

    你可以(希望)看到左侧明显小于右侧。

    另一个有趣的事实是,当你将方向改为VERTICAL时

    splitPane.setOrientation(Orientation.VERTICAL);
    

    并试图向上或向下移动分隔线,你得到一些控制台输出说“这里”。 看起来像是一些测试输出。

    这有什么问题?

1 个答案:

答案 0 :(得分:3)

要使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);
    }
}