发布
社区首页 >问答首页 >使用宽度/高度侦听器更新控件的JavaFX

使用宽度/高度侦听器更新控件的JavaFX
EN

Stack Overflow用户
提问于 2014-05-23 12:33:02
回答 1查看 2.6K关注 0票数 0

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

代码语言:javascript
代码运行次数:0
复制
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方法:

代码语言:javascript
代码运行次数:0
复制
public static void resetMusicSplitPane() {
    musicSplitPane.setDividerPosition(0, 0.7);
    Util.err("height changed");
}

我确实得到了消息‘高度改变’,但是分隔符的位置有,而不是被改变了。我认为这与JavaFX执行gui更改有关,这些更改覆盖了我的更改。换句话说,我更改了分隔符的位置,但是JavaFX更改了它,因为它的执行布局会随着窗口大小的调整而改变。

EN

回答 1

Stack Overflow用户

发布于 2014-05-24 00:41:47

通常情况下,当场景被调整大小时,分割器会自动调整自己(即分割器两侧的大小增加/减小)。我能想到的唯一原因,关于为什么,你试图设置分隔位置,不是增加或减少的高度/宽度的一边的分离器。这可以通过使用

代码语言:javascript
代码运行次数:0
复制
SplitPane.setResizableWithParent(paneToBeFixed, Boolean.FALSE);

演示它如何工作的一个小例子,( Sergeyhere中给出的例子)

代码语言:javascript
代码运行次数:0
复制
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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23829381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档