J'essaie de créer une interface utilisateur qui obtient des nombres à partir de champs de texte qui ont été ajoutés en appuyant sur un bouton, ajoute les nombres, puis imprime la console. J'ai compris comment ajouter des champs de texte dans un nombre infini, mais je n'arrive pas à obtenir tous les nombres de chaque champ de texte et à imprimer la somme. Chaque fois que je mets des chiffres dans mon champ de texte et que j'appuie sur le bouton «Ajouter des numéros», cela ne fait que renvoyer le nombre dans le dernier champ de texte ajouté. Voici mon code:Comment ajouter plusieurs champs de texte à une arborescence JavaFX
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();
}
}
}
Faites de 'field' une variable locale au lieu d'un champ d'instance. –
Donc, faites de champ une variable publique – koory
Si votre 'Pane' avec le' TextField's ont seulement 'TextField's, alors vous devez utiliser ce' Pane' pour récupérer le 'TextField's. Utilisez 'pane.getChildren()' dans votre méthode 'addNumber (..)'. – Sedrick