Javafx 从网格窗格中的文本字段获取文本

Javafx get text from textfields in gridpane

对于我正在进行的项目,我必须在屏幕上显示矩阵的值。我选择通过使用网格窗格中的文本字段来执行此操作,如下代码所示:

for(int row = 0; row < length; row++){
        for(int column = 0; column < width; column++){
            // Create a new TextField in each Iteration
            TextField tf = new TextField();
            tf.setPrefHeight(50);
            tf.setPrefWidth(50);
            tf.setAlignment(Pos.CENTER);
            tf.setEditable(true);
            tf.setText(String.valueOf(this.getElement(row, column)));

            // Iterate the Index using the loops
            setRowIndex(tf,row);
            setColumnIndex(tf,column);    
            table.getChildren().add(tf);
        }
    }

如果我更改该屏幕内文本字段的值,我希望能够保存它们。为此,我必须能够从文本字段中获取文本。我尝试了以下代码,但是 table 元素的迭代被定义为节点,因此没有 .getText() 方法。

OkButton.setOnAction(new EventHandler<ActionEvent>(){
        @Override
        public void handle (ActionEvent event){
           for (Node nd:table.getChildren()){
               //Code goes here but Node does not have .getText() method
           }

            Stage stage = (Stage) OkButton.getScene().getWindow();
            stage.close();
        }
    });

有人知道如何获取这些值吗?

非常感谢!

假设 tableGridPane 类型,您应该像这样添加 TextField

table.add(tf, column, row);

要访问一个元素,当它的 col 和行索引已知时,没有简单的方法:

public Node getNodeByRowColumnIndex(final int row,final int column,GridPane gridPane) {
    Node result = null;
    ObservableList<Node> childrens = gridPane.getChildren();
    for(Node node : childrens) {
        if(gridPane.getRowIndex(node) == row && gridPane.getColumnIndex(node) == column) {
            result = node;
            break;
        }
    }
    return result;
}

另请参阅 JavaFX: Get Node by row and column 的答案。