【问题标题】:Javafx get text from textfields in gridpaneJavafx 从网格窗格中的文本字段获取文本
【发布时间】:2017-01-04 05:10:23
【问题描述】:

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

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

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

非常感谢!

【问题讨论】:

    标签: java javafx textfield gridpane


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答 hotzst。是不是结果仍然是一个 Node 对象,没有 .getText() 方法。所以我仍然不知道文本字段中的文本是什么?还是我忽略了什么?
    • 不,你是对的,你从遍历孩子中得到的是Node。但是,如果在您的代码中您只添加 TextFields,您可以在 getNodeByRowColumnIndex` 中向 TextField 添加强制转换并返回 TextField。否则,如果您只对包含 TextFields 的单元格感兴趣,您可以调整该方法以额外检查 if 语句中的节点类型,如果未找到匹配项,则返回 nullOptional 为 null,我更喜欢哪个。
    • 我对 Java 有点陌生,所以我不知道关于强制转换。事实上,我的表只包含 TextFields,所以我可以使用它。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多