当前位置: 首页 > 面试题库 >

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

楚博雅
2023-03-14
问题内容

我试图为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);
  }
});


 类似资料:
  • SpecializedButton FXML视图只创建一个HBox,其中有两个锚窗格,左右两侧分别有一个标签和按钮。单击按钮时,它调用SpecializedButton控制器类中的doSomething()。 问题 通过这个设置,我使用FXML将视图与应用程序逻辑分开。 我会非常感谢你的真知灼见。提前道谢!

  • 问题内容: 我不知道为什么它不会显示。首先,我创建组件的一个实例,然后将其添加到二维JPanel数组中的某个元素。然后,我遍历该数组,并将每个JPanel添加到另一个JPanel容器,该容器将容纳所有JPanel。 然后,我将该最终容器添加到我的JFrame窗口中,并将可见性设置为true,它应该可见吗? 最后一个问题。注意每个Box组件如何定位,当我将组件添加到JPanel并将JPanel添加到

  • 在Swing应用程序中,我有一个使用GridBagLayout的面板。在这里,我有3列,其中一列中有一个JTextField。我想要的是设置这个JTextField的宽度(使用setPreferredSize()方法),以便它占用其列的所有可用空间。 据我所知,列的宽度是根据我使用GridBagConstraint分配给它们的权重计算的。我试图从面板的宽度中减去同一行其他组件的宽度之和,但这似乎不

  • 我试图找出如何使用一个与一个在,但没有运气,我已经查了,我能找到的都是不完整的教程和问题。下面是我的FXML 还有我的模特 和我不完整的 还有我的控制器 请不要告诉我找不到。我现在迷路了,我不知道在我的FXML中更新图像视图和标签的正确方法。任何人来帮助或与一个教程的链接,我可以遵循,我将不胜感激。

  • 问题内容: 所以我有一个叫做extends 的类。它使用空布局。我如何将其用作常规组件?当我将它放在另一个窗口中然后添加到窗口中时,它消失了。仅当我直接将其添加到窗口时,它才可见。 编辑:是的,我意识到使用带有null布局的A是不好的做法。实际上是别人的代码,我正在尝试将其用于我的目的,而不必重构它。 问题答案: 仅当我直接将其添加到窗口时,它才可见。 这是因为默认情况下,窗口使用BorderLa

  • 第一次使用JavaFX,所以我对/方法有一个问题。我在做一个弹跳球项目。首先,我使用对象创建球,但由于需要传递更多参数,我决定构建自己的球类()。这是我以前使用时使用的代码: 当将和和放入中时,就会使“球”弹出墙壁。现在,我正试图弄清楚如何使用ball来实现这一点,因为在使用我自己的对象时,无法解析、和方法。如何处理这个/构建自己的等?