【问题标题】:JavaFX using width/height listener to update controlsJavaFX 使用宽度/高度监听器来更新控件
【发布时间】:2014-07-12 19:44:11
【问题描述】:

我在我的应用程序上使用 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 将其更改回来,因为它的执行布局会随着窗口大小的调整而改变。

【问题讨论】:

    标签: javafx listener divider splitpane


    【解决方案1】:

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

    来实现
    SplitPane.setResizableWithParent(paneToBeFixed, Boolean.FALSE);
    

    一个小例子来说明它是如何工作的,(Sergeyhere 中给出的例子)

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

    【讨论】:

    • 问题是当用户增加窗口的宽度时,我希望拆分窗格分隔符被固定。有没有办法限制拆分窗格分隔线的值?因为setResizableWithParent(..)这个方法并不能解决我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    相关资源
    最近更新 更多