0

我在我的应用程序上使用 JavaFX SplitPanes,当高度和宽度发生变化时,我需要更改分隔线位置,因为我想保持分隔线位置固定。我的代码如下:

scene.widthProperty().addListener(new ChangeListener<Number>() {
    @Override
    public void changed(ObservableValue<? extends Number> observableValue, Number oldSceneWidth, Number newSceneWidth) {
         GUIController.resetMainSplitPane();
    }
});
scene.heightProperty().addListener(new ChangeListener<Number>() {
    @Override
    public void changed(ObservableValue<? extends Number> observableValue, Number oldSceneHeight, Number newSceneHeight) {
             GUIController.resetMusicSplitPane();
    }
});

和 resetSplitPane 方法:

public static void resetMusicSplitPane() {
    musicSplitPane.setDividerPosition(0, 0.7);
    Util.err("height changed");
}

我确实收到“高度已更改”的消息,但分隔线位置根本没有更改。我认为这与 JavaFX 执行覆盖我的更改的 gui 更改有关。换句话说; 我更改了分隔线的位置,但 JavaFX 将其更改回来,因为它的执行布局会随着窗口大小的调整而改变。

4

1 回答 1

0

通常,每当调整场景大小时,分隔器会自动调整自身(即分隔器两侧的大小增加/减小)。我能想到的唯一原因是,为什么要设置分隔线位置,而不是增加或减少分隔线一侧的高度/宽度。这可以通过使用来实现

SplitPane.setResizableWithParent(paneToBeFixed, Boolean.FALSE);

一个小例子来展示它是如何工作的,(谢尔盖这里给出的例子)

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.SplitPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;


public class TestObjectArray extends Application {

    @Override
    public void start(Stage stage) {
        final SplitPane root = new SplitPane();

        final Pane paneFixed = new StackPane();
        paneFixed.getChildren().add(new Text("Fixed"));

        SplitPane.setResizableWithParent(paneFixed, Boolean.FALSE);

        Pane paneFree = new StackPane();
        paneFree.getChildren().add(new Text("Free"));

        root.getItems().addAll(paneFixed, paneFree);

        Scene scene = new Scene(root, 300, 200);
        stage.setScene(scene);
        stage.show();

    }
    public static void main(String[] args) {
        launch(args);
    }
}
于 2014-05-24T00:41:47.060 回答