JavaFX:如何使我的自定义组件使用父布局中的所有可用空间?
我试图为javafx创建一个自定义组件,所以我让我的类扩展javafx.scene.control.Control并在构造函数上绘制其内容。
我的疑问是:如何使其“增长”以填充其父布局上的所有可用空间?就像当我放置一个TextArea时一样…
这是我正在做的精简示例:
@Overridepublic 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时,它总是使用该值进行绘制,但不再更新“
width”值了)-试图使用Double.MAX_VALUE强制使用更大的尺寸,然后使用布局私有符号;一切都没有用:((我一定有点误会…-我也哭了一点,但是即使这样也没用=’(
可能的线索是,我在下面放置了一个这样的侦听器,每次我调整应用程序/舞台的大小时,它都会更新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);
}
});
我可能不知所措,或者忘记了一些东西,我不知道…
我已经尝试过Google了,但是JavaFX的文档似乎太小而且肤浅,其中很多都是基于JavaFX脚本的…
我也接受Oracle提供的任何更好的教程。
预先感谢您的任何帮助…我想写很多… = O
回答:
我发现自己在搞错…
为了使组件随父组件一起增长,您需要做的就是在maxwidth和/或maxheight上定义double的最大值(如下所示),并让minwidth /
height和prefwidth / height为其默认值。
this.setMaxWidth(Double.MAX_VALUE);this.setMaxHeight(Double.MAX_VALUE);
通过这种配置,当父级更改可用空间时,它将使用最终方法setWidth()/
setHeight()来更新组件可以使用的宽度/高度。因此,由于这些方法都是最终的,因此您无法在发生更改时将其覆盖为“知道”。您需要添加如下所示的changelistener,以便在需要重新粉刷组件时收到通知。
t.widthProperty().addListener(new ChangeListener() { public void changed(ObservableValue observable, Object oldValue, Object newValue) {
System.out.println(oldValue + "|" + newValue);
}
});
以上是 JavaFX:如何使我的自定义组件使用父布局中的所有可用空间? 的全部内容, 来源链接: utcz.com/qa/404444.html