2

複数の分割ペインが互いに埋め込まれた JavaFX GUI を設計しています。ユーザーがビューをリセットするオプションを選択した場合、仕切りの位置を初期値にリセットできるようにしたいと考えています。問題は、ユーザーがビューのリセット オプションを複数回クリックして、仕切りの位置を完全にリセットする必要があることです。一度実行すると、同じ向きの仕切りはリセットされますが、反対向きの仕切りはリセットされません。

これが問題の例です。スライダーをドラッグし、ウィンドウの上部にある [ビューのリセット] ボタンをクリックします。

public void start(Stage stage) throws Exception
{
    SplitPane mainWindow = new SplitPane();
    SplitPane leftPanel = new SplitPane();
    SplitPane rightPanel = new SplitPane();

    Button resetViewButton = new Button("Reset View");
    VBox mainFrameVBox = new VBox();
    Scene scene = new Scene(mainFrameVBox, 500, 500);

    mainWindow.setOrientation(Orientation.HORIZONTAL);
    mainWindow.getItems().addAll(leftPanel, rightPanel);
    mainWindow.setDividerPosition(0, 0.125);

    leftPanel.setOrientation(Orientation.VERTICAL);
    leftPanel.getItems().addAll(new VBox(new Text("Test 1")), new VBox(new Text("Test 2")));
    leftPanel.setDividerPosition(0, 0.5);

    rightPanel.setOrientation(Orientation.VERTICAL);
    rightPanel.getItems().addAll(new VBox(new Text("Test 3")), new VBox(new Text("Test 4")));
    rightPanel.setDividerPosition(0, 0.85);

    mainFrameVBox.getChildren().addAll(resetViewButton, mainWindow);

    VBox.setVgrow(mainWindow, Priority.ALWAYS);

    stage.setScene(scene);
    stage.show();

    resetViewButton.setOnAction(new EventHandler<ActionEvent>()
    {
       @Override
       public void handle(ActionEvent event)
       {
           mainWindow.setDividerPosition(0, 0.125);
           leftPanel.setDividerPosition(0, 0.5);
           rightPanel.setDividerPosition(0, 0.85);
       }
    });
}

各スライダーに遅延タイマーを追加してみましたが、これで問題は解決しましたが、面倒な解決策のように感じます。より良いアプローチがあれば、何かアイデアはありますか?

4

1 に答える 1

1

これが私のために働いたものです。まだ一種の不器用なIMO。

    resetViewButton.setOnAction((ActionEvent event) -> {
        mainWindow.setDividerPosition(0, 0.125);
        leftPanel.setDividerPosition(0, 0.5);
        leftPanel.layout();
        rightPanel.setDividerPosition(0, 0.85);
        rightPanel.layout();
    });

埋め込まれた SplitPanes を取得してレイアウトを完成させるには、複数のパスが必要なようです。また、いくつかの同様の質問で述べたように、 Platform.runLater() を使用して仕切りの配置コマンドをイベント キューに配置しようとしましたが、それは信頼できないようでした。これは、JavaFX 8を搭載したWindowsで常に機能します。

于 2015-03-06T16:30:37.707 に答える