【问题标题】:Accessing fields in a JavaFX SceneBuilder app访问 JavaFX SceneBuilder 应用程序中的字段
【发布时间】:2020-08-08 16:44:05
【问题描述】:

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);

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

另外,我想在 UI 中添加一个“添加行”按钮,并将该行包含在计算中,这会在混合中引入一些非静态命名的字段。

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

【问题讨论】:

    标签: java javafx scenebuilder


    【解决方案1】:

    如果将 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
        }
    }
    

    【讨论】:

    • getChildren() 在我的应用程序中的GridPane 上是我需要的,谢谢,但我认为这揭示了我的模型的弱点。我想一次处理一行。我不认为GridPane 有任何允许逐行处理的东西(除了手动检查行和列索引)。我最好使用 hbox 的“堆栈”代替,这样我就可以遍历所有 hbox / 行,然后在每个 hbox / 行内进行迭代。
    • 在这种情况下,您可能会发现this 很有帮助
    猜你喜欢
    • 2014-08-12
    • 2015-06-10
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2020-04-22
    • 2021-01-14
    相关资源
    最近更新 更多