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

我正在尝试为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时,它总是使用此值绘制但不再更新“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);
  }
});

可能是我经过一些房产或遗忘的东西,我不知道……

我已经尝试了谷歌,但似乎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:如何使我的自定义组件使用父布局中的所有可用空间? - 代码日志