11

SplitPane全体の比例サイズ変更を実現するにはどうすればよいですか?

public class JfxSplitPaneTest extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        SplitPane split = new SplitPane();
        StackPane child1 = new StackPane();
        child1.setStyle("-fx-background-color: #0000AA;");
        StackPane child2 = new StackPane();
        child2.setStyle("-fx-background-color: #00AA00;");
        StackPane child3 = new StackPane();
        child3.setStyle("-fx-background-color: #AA0000;");
        split.getItems().addAll(child1, child2, child3);
        //split.setDividerPositions(0.1f, 0.6f, 0.9f)
        stage.setScene(new Scene(split, 400, 300));
        stage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }
}

プログラムを開始します。

ここに画像の説明を入力してください

仕切りを好きなように設定します。

ここに画像の説明を入力してください

ウィンドウの幅を本当に小さくします(続けてさらに小さくしました。写真はありません):

ここに画像の説明を入力してください

サイズを元に戻し、仕切りが私が設定した方法でも、プログラム開始時の仕切りでもないことを確認します。

ここに画像の説明を入力してください

これを行うと、私が期待するものに近づきます。

    child1.setMinWidth(Region.USE_PREF_SIZE)
    child1.setPrefWidth(100)
    child2.setMinWidth(Region.USE_PREF_SIZE)
    child2.setPrefWidth(200)
    child3.setMinWidth(Region.USE_PREF_SIZE)
    child3.setPrefWidth(300)

ただし、仕切りは最初は間違った位置にあり(SplitPaneのサイズを変更するまでは、1pxで十分です)、ウィンドウ幅を縮小すると、仕切りはコンポーネントの内側にあります。

どうすればこれを機能させることができますか?

4

3 に答える 3

2

stage.widthProperty()stage.heightProperty( )に Change Listener を追加してみてください。そしてこれを呼び出します:

    split.setDividerPositions(0.1f, 0.6f, 0.9f)
于 2013-09-27T11:34:11.730 に答える
0

経験則では、サイズ変更イベントがトリガーされたときにsetDividerPositionswithを使用します。Platform.runLater

おそらく、デフォルトの比率から始めて、ユーザーにその比率を変更させ、サイズ変更イベントが発生したときにこの比率を維持することをお勧めします。splitPaneいくつかの 25/75 垂直 FX を考えてみましょうstage:

splitPane.setDividerPositions(0.25f, 0.75f);
stage.heightProperty().addListener((obs, oldVal, newVal) -> {
    double[] positions = splitPane.getDividerPositions(); // reccord the current ratio
    Platform.runLater(() -> splitPane.setDividerPositions(positions)); // apply the now former ratio
});
于 2018-03-14T12:27:33.143 に答える