访问JavaFX SceneBuilder应用程序中的字段



Intellij IDEA+Oracle JDK 14+JavaFX 14

我正在制作一个简单的JavaFX计算器风格的应用程序,并使用SceneBuilder。

除了引用单个唯一的fx:id之外,还有什么更简单的方法可以引用SceneBuilder构建的应用程序中的字段吗?例如,如果我在SceneBuilder中构建了一个UI,其中包含一些行和列的数据:

---------------------
| field00 | field01 |
| field10 | field11 |
---------------------

我想对数据做一些数学运算。除了引用静态名称之外,还有什么更简单的方法可以引用字段吗?

@FXML private TextField field00;
@FXML private TextField field01;
@FXML private TextField field10;
@FXML private TextField field11;

我在做一些非常天真的事情,比如:if field00 is not null and if field01 is not null and ...。我创建了一个类来表示每一行,并将这些对象读取到ArrayList中,这让它变得更好了,但我创建对象的代码仍然很难看,比如:

RowList myRowList = new RowList();
MyRowClass aRow =
new MyRowClass(
Double.parseDouble(field00.getText()),
Double.parseDouble(field01.getText()));
myRowList.addRow(aRow);
aRow =
new Assignment(
Double.parseDouble(field10.getText()),
Double.parseDouble(field11.getText()));
myRowList.addRow(aRow);

我希望能够以某种方式遍历字段。

此外,我想添加一个";添加一行";按钮,并将该行包括在计算中,这将向混合中引入一些非静态命名的字段。

这里的解决方案是跳过SceneBuilder并直接在我的代码中创建UI吗?

如果将TextFields放入容器(如HBox(中,则可以在容器对象上使用.getChildren()方法来获取其所有子节点。然后你可以像这样循环浏览所有这些:

HBox h = new HBox();
h.getChildren().add(new TextField());
h.getChildren().add(new TextField());
h.getChildren().add(new TextField());
// loop through each node in the HBox
for (Node n : h.getChildren())
{
// if the Node is of type TextField, and the text inside is not null
if (n instanceof TextField && ((TextField) n).getText() != null)
{
// do something
}
}

最新更新