для проекта, над которым я работаю, я должен отображать значения матрицы на экране. Я решил сделать это с помощью текстовых полей в gridpane, как следующий код указывает:Javafx получить текст из текстовых полей в 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);
}
}
Если изменить значения в этом окне для текстовых полей, я хочу, чтобы иметь возможность сохранить их. Чтобы сделать это, я должен уметь получать текст из текстовых полей. Я пробовал использовать следующий код, но итерация по элементам таблицы определяется как Nodes и поэтому не имеет метода .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();
}
});
Кто-нибудь знает, как получить эти значения?
Большое спасибо!
Спасибо за ваш ответ hotzst. Разве это не так, что все же результатом является объект Node, не имеющий метода .getText(). Так что я до сих пор не знаю, что такое текст в текстовом поле? Или я что-то пропускаю? – ComputerSaysNo
Нет, вы правы, что вы получаете от итерации через детей - это «Узел». Однако, если в вашем коде вы добавляете 'TextField', вы можете добавить приведение в' TextField' в getNodeByRowColumnIndex' и вернуть 'TextField'. В противном случае, если вас интересуют только ячейки, в которых хранится 'TextField', вы можете адаптировать метод для дополнительной проверки типа узла в инструкции if, и если совпадение не найдено, возвращайте' null' или 'Optional' из null, который я бы предпочел. – hotzst
Я немного новичок в Java, поэтому я не знал о кастинге. Действительно, моя таблица содержит только TextFields, поэтому я могу ее использовать. Большое спасибо за помощь! – ComputerSaysNo