Javafx从gridpane

时间:2016-08-27 19:07:43

标签: java javafx textfield 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);
        }
    }

如果我更改文本字段的屏幕内的值,我希望能够保存它们。为此,我必须能够从文本字段中获取文本。我尝试使用代码,但是对表元素的迭代被定义为节点,因此没有.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();
        }
    });

有谁知道如何获得这些价值观?

非常感谢!

1 个答案:

答案 0 :(得分:2)

假设table的类型为GridPane,您应该像这样添加TextField

table.add(tf, column, row);

为了访问元素,当它的col和row索引已知时,没有简单的方法:

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的答案。