Je crée plusieurs TextFields au moment de l'exécution à l'aide de boucles et de les ajouter à l'intérieur Gridpane (qui a 8 colonnes) comme ceci:JavaFx: Comment valider plusieurs TextFields lors de l'exécution?
public static GridPane table(int rows){
GridPane table = new GridPane();
for(int i=0; i<rows; i++){
JFXTextField textField1 = new JFXTextField();
textField1.setAlignment(Pos.CENTER);
JFXTextField textField2 = new JFXTextField();
textField1.setAlignment(Pos.CENTER);
JFXTextField textField3 = new JFXTextField();
textField1.setAlignment(Pos.CENTER);
JFXTextField textField4 = new JFXTextField();
textField1.setAlignment(Pos.CENTER);
JFXTextField textField5 = new JFXTextField();
textField1.setAlignment(Pos.CENTER);
JFXTextField textField6 = new JFXTextField();
textField1.setAlignment(Pos.CENTER);
JFXTextField textField7 = new JFXTextField();
textField1.setAlignment(Pos.CENTER);
JFXTextField textField8 = new JFXTextField();
textField1.setAlignment(Pos.CENTER);
//add them to the GridPane
table.add(textField1, 0, i+1);
table.add(textField2, 1, i+1);
table.add(textField3, 2, i+1);
table.add(textField4, 3, i+1);
table.add(textField5, 4, i+1);
table.add(textField6, 5, i+1);
table.add(textField7, 6, i+1);
table.add(textField8, 7, i+1);
}
return table;
}
Ensuite je crée une autre méthode pour revenir composant de table à particulier ligne et colonne comme ceci:
public static Node getComponent (int row, int column, GridPane table) {
for (Node component : table.getChildren()) { // loop through every node in the table
if(GridPane.getRowIndex(component) == row &&
GridPane.getColumnIndex(component) == column) {
return component;
}
}
return null;
}
le problème est ici: Je veux valider chacun des TextField, donc si l'utilisateur oublie d'écrire dans l'un des TextField, je veux désactiver le bouton, à cet effet J'utilise la liaison comme ceci:
private void validatingGrid() {
GridPane table = (GridPane) anchorPane().getChildren().get(0);
for(int i=1 ; i<=comboBox().getValue(); i++){
JFXTextField text0 = ((JFXTextField)getComponent (i, 0, table));
JFXTextField text1 = ((JFXTextField)getComponent (i, 1, table));
JFXTextField text2 = ((JFXTextField)getComponent (i, 2, table));
JFXTextField text3 = ((JFXTextField)getComponent (i, 3, table));
JFXTextField text4 = ((JFXTextField)getComponent (i, 4, table));
JFXTextField text5 = ((JFXTextField)getComponent (i, 5, table));
JFXTextField text6 = ((JFXTextField)getComponent (i, 6, table));
JFXTextField text7 = ((JFXTextField)getComponent (i, 7, table));
button.disableProperty().bind(
Bindings.isEmpty(text0.textProperty())
.or(Bindings.isEmpty(text1.textProperty()))
.or(Bindings.isEmpty(text2.textProperty()))
.or(Bindings.isEmpty(text3.textProperty()))
.or(Bindings.isEmpty(text4.textProperty()))
.or(Bindings.isEmpty(text5.textProperty()))
.or(Bindings.isEmpty(text6.textProperty()))
.or(Bindings.isEmpty(text7.textProperty()))
);
}
}
Mais ce qui se passe est-il est seulement la validation de la dernière ligne, nous allons dire si je crée 3 rangées de textfeilds dans le Gridpane, il est donc seulement la validation de 3ème rangée non 1er et 2e rangs et sur la base des entrées de la 3e rangée, il est activer le bouton, mais je veux après avoir validé toutes les lignes, il devrait activer le bouton sinon. S'il vous plaît aidez-moi comment puis-je y parvenir.
Qu'est-ce que 'JFXTextField'? Pourquoi ne pas utiliser 'TextField' – Yahya
@Yahya Apprenez google-fu cela rapidement fait ressortir le fait que c'est un contrôle de [JFoenix] (https://github.com/jfoenixadmin/JFoenix) et l'utiliser est fondamentalement un choix de conception. Bien que dans ce cas, il rend juste la description plus compliquée que nécessaire ... – fabian