1

以前の JavaFX 2.0 バージョンから JavaFX 2.0 b36 (Windows 用 SDK (32 ビット) + Netbeans プラグイン) に更新して以来、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);
    }
}

ご覧のとおり (うまくいけば)、左側が明らかに右側よりも小さいことがわかります。

もう 1 つの面白い事実は、向きを VERTICAL に変更したときです。

splitPane.setOrientation(Orientation.VERTICAL);

分割線を上下に移動しようとすると、「HERE」というコンソール出力が表示されます。テスト出力のように見えます。

これの何が問題なのですか?

4

1 に答える 1

4

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);
    }
}
于 2011-07-30T12:13:49.183 に答える