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强制使用更大的尺寸,然后使用布局私有符号;一切都没有用:((我一定有点误会…-我也哭了一点,但是即使这样也没用=’(

可能的线索是,我在下面放置了一个这样的侦听器,每次我调整应用程序/舞台的大小时,它都会更新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

回到顶部