访问 JavaFX SceneBuilder 应用程序中的字段
Accessing fields in a JavaFX SceneBuilder app
Intellij IDEA + Oracle JDK 14 + JavaFX 14
我正在制作一个简单的 JavaFX 计算器风格的应用程序,并使用 SceneBuilder。
有没有更简单的方法来引用 SceneBuilder 构建的应用程序中的字段,而不是引用单独的唯一 fx:id
?例如,如果我有一个内置于 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 ...
。我通过创建一个 class 来表示每一行,并且将这些对象读入一个 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);
我希望能够以某种方式遍历字段。
此外,我想向 UI 添加一个“添加行”按钮,并将该行包含在计算中,这会在混合中引入一些非静态命名的字段。
这里的解决方案是跳过 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
}
}
Intellij IDEA + Oracle JDK 14 + JavaFX 14
我正在制作一个简单的 JavaFX 计算器风格的应用程序,并使用 SceneBuilder。
有没有更简单的方法来引用 SceneBuilder 构建的应用程序中的字段,而不是引用单独的唯一 fx:id
?例如,如果我有一个内置于 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 ...
。我通过创建一个 class 来表示每一行,并且将这些对象读入一个 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);
我希望能够以某种方式遍历字段。
此外,我想向 UI 添加一个“添加行”按钮,并将该行包含在计算中,这会在混合中引入一些非静态命名的字段。
这里的解决方案是跳过 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
}
}