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

标签 java 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 时,它总是使用这个值来绘制但不再更新“宽度”值) - 尝试使用 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/

相关文章:

java - 验证一个形状是否在另一个形状内的算法 - javafx

java - 为什么我不适用于 javafx 上的参数?

java - 使用 Maven 构建应用程序失败,我可以在本地运行代码,但无法在 heroku 上部署

java - 实时采样模式

java - Apache-poi:想要遍历Excel列并对下一列中存在的相应值求和

java - 加载 keystore 时出错(PKCS12)

Java Hibernate EntityManager merge() 总是想为所有字段插入空值

java - 在 JavaFX 中调整 ToggleButton 的大小

javafx - 如何定义gluon应用程序版本

javascript - 通过 JavaFX 中的 WebEngine 使用 JS 脚本将值插入密码字段