我试图创建一个UI,通过按下按钮从文本字段中获取数字,添加数字,然后打印控制台。我已经弄清楚如何添加无限数量的文本字段,但我似乎无法从每个文本字段中获取所有数字并打印出总和。每当我将数字放入我的文本字段并按下我的“添加数字”时,按钮,它只返回添加的最新文本字段中的数字。这是我的代码:
public VBox pane;
@FXML
private Button addButton;
@FXML
private TextField field;
@FXML
private void addNewTextField(ActionEvent event) {
field = new TextField();
field.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
if (!newValue.matches("\\d*")) {
field.setText(newValue.replaceAll("[^\\d]", ""));
}
}
});
pane.getChildren().add(field);
}
@FXML
private void addNumbers(ActionEvent e) {
ArrayList<Integer> numList = new ArrayList<>();
try {
ArrayList<Integer> list = new ArrayList<>();
int result = Integer.parseInt(field.getText());
list.add(result);
int sum = 0;
for (int i : list) {
sum += result;
System.out.println("The sum of numbers is = " + sum);
}
} catch (NumberFormatException exception) {
exception.printStackTrace();
}
}
}
答案 0 :(得分:1)
在这种情况下,字段根本不应该是实例变量,因此不应该注释@FXML,而应该在您的方法中声明。
如果您不知道局部变量是什么以及它与实例变量的区别,请阅读此tutorial on local variables。
删除以下行:
@FXML
private TextField field;
将方法主体更改为:
private void addNewTextField(ActionEvent event) {
TextField field = new TextField();
. . .
}
除此之外:您永远不应该将带注释的变量@FXML
设置为新值(FXMLLoader将引用一个引用,并且不应该由应用程序员重新分配)。