我正在尝试为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();
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,TextArea将获得布局为其提供的所有空间.我希望我的组件也一样!
我已经尝试过: - 更改属性setMaxWidth/Height,setPrefWidth/Height,setMinWidth/Height; (当我设置MinValues时,它总是使用这些值绘制但不再更新"width"值) - 尝试使用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);
}
});
Run Code Online (Sandbox Code Playgroud)
可能是我经过一些房产或忘了什么,我不知道......
我已经尝试了Google,但似乎JavaFX的文档太小而且肤浅,而且很多都是基于JavaFX脚本...
我也接受任何教程,更好的是Oracle提供的教程...
在任何帮助之前感谢...我写的很多东西... = O.
Rod*_*tão 17
我发现了我的错误......
要使组件与其父组件一起增长,您需要做的就是在maxwidth和/或maxheight上定义double的最大值(如下所示),并将minwidth/height和prefwidth/height设置为默认值.
this.setMaxWidth(Double.MAX_VALUE);
this.setMaxHeight(Double.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)
使用此配置,当父级更改可用空间时,它将使用最终方法setWidth()/ setHeight()来更新组件可以使用的宽度/高度.因此,由于这些方法是最终的,因此无法在发生更改时将其覆盖为"知道".您需要添加如下所示的changelistener,以便在需要重新绘制组件时收到通知.
t.widthProperty().addListener(new ChangeListener() {
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
System.out.println(oldValue + "|" + newValue);
}
});
Run Code Online (Sandbox Code Playgroud)