Jtable mise à jour de la ligne sélectionnée
J'ai une jtable qui a un bouton modifier, quand je sélectionne une ligne d'un clic de bouton éditer et modifier les champs, puis cliquez sur enregistrer bouton, cette ligne n'est pas mise à jour, Et j'ai actualiser ma table de Changer la ligne!
Mon code:
if (e.getSource() == editButton) {
selectedRow = uTable.getSelectedRow();
if (selectedRow >= 0) {
editUser(selectedRow);
} else {
JOptionPane.showMessageDialog(null, "Select a row");
}
}
public void editUser(int row) {
UserInformation userInf = userModel.getSelectedMember(row);
NewUserFrame_Edit edit = new NewUserFrame_Edit(userInf, row);
}
...
Mon NewUserFrame_Edit Classe :
public class NewUserFrame_Edit extends javax.swing.JFrame {
private AllUser userModel;
private int selectedrow;
private String gender;
public NewUserFrame_Edit(AllUser userModel,UserInformation userinf, int row) {
...
this.userModel = userModel;
jTextField1.setText(userinf.getFname().toString().trim());
jTextField2.setText(userinf.getLname().toString().trim());
if (userinf.getGender().equals("Male")) {
jRadioButton1.setSelected(true);
} else {
jRadioButton2.setSelected(true);
}
jTextField3.setText(userinf.getDate());
selectedrow = row;
setVisible(true);
}
private void updateButtonActionPerformed(java.awt.event.ActionEvent evt) {
userinf = new UserInformation();
userinf.setFname(jTextField1.getText());
userinf.setLname(jTextField2.getText());
userinf.setGender(gender);
userinf.setDate(jTextField3.getText());
userModel.setValueAt(userinf.getFname() , selectedrow, 1);
userModel.setValueAt(userinf.getLname() , selectedrow, 2);
userModel.setValueAt(userinf.getGender(), selectedrow , 3);
userModel.setValueAt(userinf.getDate() , selectedrow, 4);
userModel.updateFile(userModel.Udata);
NewUserFrame_Edit.this.dispose();
}
...
}
Mon setValueAt() et updateFile() méthodes de ma Classe de modèle:
public class AllUser extends AbstractTableModel {
...
@Override
public void setValueAt(Object value, int rowIndex, int columnIndex) {
UserInformation userInfo = Udata.get(rowIndex);
switch (columnIndex) {
case 0:
userInfo.setID((String) value);
break;
case 1:
userInfo.setFname((String) value);
break;
case 2:
userInfo.setLname((String) value);
break;
case 3:
userInfo.setGender((String) value);
break;
case 4:
userInfo.setDate((String) value);
break;
}
fireTableCellUpdated(rowIndex, columnIndex);
}
public void updateFile(ArrayList<UserInformation> data) {
PrintWriter pw;
try {
pw = new PrintWriter(new FileWriter("AllUserRecords.txt"));
for (UserInformation userinf : data) {
String line = userinf.getID()
+ " " + userinf.getFname()
+ " " + userinf.getLname()
+ " " + userinf.getGender()
+ " " + userinf.getDate();
pw.println(line);
}
pw.close();
} catch (IOException ioe) {
}
}
...
}
Quand j'sélectionnez une ligne et cliquez pour bouton modifier, une nouvelle jframe est ouvert que son champ de texte est de le remplir avec des données plus anciennes, et je l'ai mise à jour de données et cliquez pour bouton enregistrer.
Ainsi, ma colonne n'est pas certain.
- Je sélectionner une ligne entière, Pas une cellule!
Grâce.
updateRow(int index)
et définir une nouvelle Valeur pour chaque cellule de cette ligne à l'aide de setValueAt(newValue,row,index)
. Et dans substituée setValue
méthode de TableModel
écrire fireTableCellUpdated(row, col)
Oh' Salut cher @VishalK , Êtes-vous d'examen de l'ensemble de mon projet?
Salut @Sajjad: Vous avez fait du bon boulot..à l'exception de quelques erreurs mineures.. Et c'est le seul que j'ai trouvé. Et concernant votre projet de niveau..Il a encore besoin de peu de modifications, puis d'être tous beaux...
Où est votre code pour
updateFile()
dans AllUser
de classe.?Attendre..laissez-moi vérifier votre méthode..et je l'ai mise à jour mon post..
OriginalL'auteur Sajad | 2013-03-21
Vous devez vous connecter pour publier un commentaire.
Vous pouvez créer une méthode appelée
updateRow(int index,String[] values)
au sein de votreAbstractModel
l'extension de la classe et de définir une nouvelle Valeur pour chaque cellule de cette ligne à l'aide de setValueAt(newValue,ligne,index). Et dans substituéesetValue
méthode deTableModel
écrire fireTableCellUpdated(ligne, col).Examiner le Code Donné ci-dessous. Regardez les
updateRow
etsetValueAt
méthode dansMyModel
classe. Et regarder((MyModel)myModel).updateRow(row,values);//update row
écrit dansMyMouseAdapter
classe.Mise à JOUR
Tout allait bien avec votre code d'origine. Garder le code tel qu'il était initialement. Le seul problème a été la ligne de
userModel = new AllUser();
dans la méthodeupdateButtonActionPerformed
. Il était de créer un nouvel objet deAllUser
au lieu d'utiliser de l'actuel. Donc, vous devez supprimer cette ligne deupdateButtonActionPerformed
. et changer leNewUserFrame_Edit
constructeur comme suit:changer votre
updateButtonActionPerformed
suit:Et changement
editUser(int row)
méthode de classeUserPage
comme suit:Ici est votre
updateFile
methd:Vous n'avez qu'un
setValueAt
définies au sein de votreAbstractTableModel
substituée classe. il suffit d'écrire quefireTableCellUpdated
méthode à cet endroit seulement. Oui , vous devez utiliser SwingUtilities.invokeLater pour faire quelques changements dans l'interface graphique . Mais si vous faites des changements dans l'EDT commeactionPerformed
, alors vous n'avez pas besoin de cela..Tout d'abord, vous créez un objet vide de
UserInformation
direobj
. Après vous faites les changements nécessaires dans letextfields
de la zone de texte et cliquez sur OK remplir les champs correspondants deobj
correspondant textfield valeur.. Et ensuite appelerupdateRow(index,obj)
oùindex
est le numéro d'index de édité ligne. J'espère qu'il est clair maintenant pour vous.Tout ce que j'avais posté dans l'exemple de code est juste la démo..Il vous indique la dynamique de la façon de mettre à jour la JTable à faire quelques changements. Vous n'avez pas à copier exactement..
Admin juste ne pouvez pas changer une ligne sélectionnée numéro d'identification, Tout peut changer fName et Lname et le Sexe et la date.
OriginalL'auteur Vishal K
Pour changer
JTable
entrées, utilisez TableModel#setValueAt. L'appel defireTableDataChanged
est inutile. C'est pour une utilisation interne dansTableModel
lui-même.J'utilise setVlaueAt méthode sur mon modèle de table de Classe.
où dois utiliser cette instruction?
Après "Save" bouton cliqué?
Je pense que le troisième argument de la méthode sélectionnée colonne, ok?
OriginalL'auteur Reimeus
Une autre façon de mettre en œuvre des changements à travers JTable est d'utiliser le modèle de code ci-dessous:
Ici, vous pouvez utiliser l'événement pour obtenir la ligne et la colonne de la cellule qui a été changé dans le JTable variable.
OriginalL'auteur blackpanther