gpt4 book ai didi

JavaFX:如何让我的自定义组件使用父布局中的所有可用空间?

转载 作者:搜寻专家 更新时间:2023-10-31 08:09:18 25 4
gpt4 key购买 nike

我正在尝试为 javafx 创建一个自定义组件,所以我让我的类扩展 javafx.scene.control.Control 并在构造函数上绘制它的内容。

我的疑问是:如何让它“增长”以填充其父布局上的所有可用空间?就像当我放置一个 TextArea 时......

这是我正在做的缩水示例:

@Override
public void start(Stage primarystage) throws Exception {
BorderPane bpane = new BorderPane();
mainscene = new Scene(bpane, 800, 600);
((BorderPane) this.mainscene.getRoot()).setCenter(t);

primarystage.setScene(mainscene);
primarystage.show();
}

在此示例中,TextArea 将获得布局为其提供的所有空间。我希望我的组件也这样做!

所有我已经尝试过的事情:- 更改属性setMaxWidth/Height、setPrefWidth/Height、setMinWidth/Height; (当我设置 MinValues 时,它总是使用这个值来绘制但不再更新“宽度”值)- 尝试使用 Double.MAX_VALUE 强制更大的尺寸然后布局 privides;一切都不起作用 :( 我一定是误会了......- 我也哭了一点,但即使这样也无济于事 ='(

也许线索是,我在下面放置了一个这样的监听器,每次我调整应用程序/阶段的大小时,它都会更新 TextArea。但是当我添加这个监听器时,我的组件永远不会更新......

TextArea t = new TextArea("teste");
t.widthProperty().addListener(new ChangeListener() {
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
System.out.println(oldValue + "|" + newValue);
}
});

可能我路过一些属性或忘记了一些东西,我不知道...

我已经尝试谷歌了,但似乎 JavaFX 的文档太少和肤浅,而且很多都是基于 JavaFX 脚本的...

我也接受任何比 Oracle 提供的教程更好的教程...

在此先感谢您的帮助...我写了很多... =O

最佳答案

我发现我错了......

要使组件随其父组件一起增长,您需要做的就是在 maxwidth 和/或 maxheight 上定义它的最大值为 double(如下所示),并让 minwidth/height 和 prefwidth/height 与它一起增长默认值。

this.setMaxWidth(Double.MAX_VALUE);
this.setMaxHeight(Double.MAX_VALUE);

使用此配置,当父级更改可用空间时,它将使用 final方法 setWidth()/setHeight() 来更新您的组件可以使用的宽度/高度。因此,由于这些方法是最终的,您不能覆盖它以“知道”何时发生更改。您需要添加如下所示的变更监听器,以便在您需要重新绘制组件时收到通知。

t.widthProperty().addListener(new ChangeListener() {
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
System.out.println(oldValue + "|" + newValue);
}
});

关于JavaFX:如何让我的自定义组件使用父布局中的所有可用空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9816099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com