2016-12-20 3 views
0

Ich habe eine JTable, in der ich Benutzer mit mehreren Attributen wie Alter, Name, etc. hinzufügen kann. Das funktioniert und die Benutzer werden zu meiner Arraylist und JTable hinzugefügt. Nun, was ich will ist, wenn ich die JTable-Zeile auswählen, um das Objekt in der Array-Liste des Benutzers gespeichert werden, so dass ich sie ändern oder löschen kann. HierWie bekomme ich das gespeicherte Objekt von JTable

ist das Beispiel von meinem Code, wenn ich Benutzer hinzufügen die JTable:

private void jButtonAddAUserActionPerformed(java.awt.event.ActionEvent evt) {             
    User obj=new User(); 
    obj.setName(jTextFieldName.getText()); 
    obj.setAdress(jTextFieldAdress.getText()); 
    obj.setNumCC(Integer.parseInt(jTextFieldNumCC.getText())); 
    obj.setTele(Integer.parseInt(jTextFieldTele.getText())); 
    obj.setUserName(jTextFieldUserName.getText()); 
    obj.setPassword(jTextFieldPassword.getText()); 

    DefaultTableModel model=(DefaultTableModel) jTableUsers.getModel(); 
    model.addRow(new Object[]{ 
     jTextFieldName.getText(), 
     jTextFieldAdress.getText(), 
     jTextFieldTele.getText(), 
     jTextFieldNumCC.getText(), 
     obj.isAdmin 
    }); 

    usersList.add(obj); 
    JOptionPane.showMessageDialog(null,"Data inserted correctly."); 
    jTextFieldName.setText(""); 
    jTextFieldAdress.setText(""); 
    jTextFieldNumCC.setText(""); 
    jTextFieldTele.setText(""); 
    jTextFieldPassword.setText(""); 
    jTextFieldUserName.setText(""); 
} 

Edit: Hier ist der Code für Benutzer bereits entfernt arbeiten:

private void jButtonRemoverActionPerformed (java.awt .event.ActionEvent evt) {

DefaultTableModel model = (DefaultTableModel) jTableInvestidores.getModel(); 

    User u = userList.get(jTableUsers.getSelectedRow()); 
    userList.remove(u); 
    model.removeRow(jTableUsers.getSelectedRow()); 
    JOptionPane.showMessageDialog(null,"Data removed."); 

} 

Und hier ist der Code für Benutzer aktualisieren, die immer noch nicht funktioniert, im Versuch, sie zu aktualisieren f aus dem jTextFields:

private void jButtonUpdateActionPerformed(java.awt.event.ActionEvent evt) {             

    DefaultTableModel model = (DefaultTableModel) jTableUsers.getModel(); 
    userList.get(jTableUsers.getSelectedRow()); 
    model.setValueAt(jTextFieldName.getText(), jTableUsers.getSelectedRow(),0); 
    model.setValueAt(jTextFieldAdress.getText(), jTableUsers.getSelectedRow(),1); 
    model.setValueAt(jTextFieldPhone.getText(), jTableUsers.getSelectedRow(),2); 
    model.setValueAt(jTextFieldNumCC.getText(), jTableUsers.getSelectedRow(),3); 
    User u =userList.get(jTableUsers.getSelectedRow()); 

    JOptionPane.showMessageDialog(null,"Data updated."); 

} 

Kann mir bitte jemand helfen? Vielen Dank!

+0

'userList.get (table.getSelectedRow());' führt zu einem Benutzerobjekt am angegebenen Index. Jetzt können Sie das Benutzerobjekt ändern und den Benutzer in Ihrer Liste ersetzen. Danach "repaint" Ihre Tabelle mit den geänderten Daten – XtremeBaumer

Antwort

3

könnten Sie etwas ähnliches verwenden. Leider haben Sie nicht angegeben, wie Sie den Benutzer bearbeiten möchten.

User u=userList.get(table.getSelectedRow()); //get user for editing 
int location=table.getSelectedRow(); //get location in list to maintain order 
userList.remove(u); //remove selected user to edit variables 
//modify user u 
userList.add(location,u); //insert user at previous location in list 
model.setRowCount(0); //reset table model 
for (int i = 0; i < userList.size(); i++) { //refill table model 
    User u = userList.get(i); /7get user 
    Vector<Object> vhelp = new Vector<>(); //create vector to store the values of the variables from user 
    vhelp.add(/*your data*/); // 1 add per variable that should be displayed in table 
    model.addRow(vhelp); //add the data to the table model (fills the table with data) 
} 

Ihre Methode sollte wie folgt aussehen:

DefaultTableModel model = (DefaultTableModel) jTableUsers.getModel(); 
    User u = userList.get(jTableUsers.getSelectedRow()); 
    int location=jTableUsers.getSelectedRow(); 
    userList.remove(u); 
    u.setName(jTextFieldName.getText()); 
    u.setAdress(jTextFieldAdress.getText()); 
    u.setNumCC(Integer.parseInt(jTextFieldNumCC.getText())); 
    u.setTele(Integer.parseInt(jTextFieldTele.getText())); 
    //u.isAdmin can't tell what this has to be 
    userlist.add(location,u); 

    model.setRowCount(0); 
    for (int i = 0; i < userList.size(); i++) { 
     User u = userList.get(i); 
     Vector<Object> vhelp = new Vector<>(); 
     vhelp.add(u.getName()); 
     vhelp.add(u.getAddress()); 
     vhelp.add(u.getTele()); 
     vhelp.add(u.getNumCC()); 
     vhelp.add(u.isAdmin); 
     model.addRow(vhelp); 
    } 
    JOptionPane.showMessageDialog(null, "Data updated."); 
+0

Müssen alle Objekt (Benutzer) Attribute in der JTabelle haben? Ich habe Index außerhalb der Grenzen, wenn Löschen könnte es daran liegen? – Dan

+0

auf welches Objekt erhalten Sie den Fehler? – XtremeBaumer

+0

Ich bekomme den Fehler nach: Benutzer u = userList.get (table.getSelectedRow()); – Dan

1

die Benutzer auf meine Arraylist und JTable hinzugefügt werden.

Speichern Sie die Daten nicht an zwei verschiedenen Orten. Die Daten sollten nur im TableModel der JTable gespeichert werden.

Sie können also ein benutzerdefiniertes "Benutzer" -Objekt erstellen, das die Daten zu jedem Benutzer enthält. Dann können Sie eine benutzerdefinierte TableModel erstellen, um "Benutzer" -Objekt zu halten, das von der JTable angezeigt werden und zugreifen kann.

Nun, was ich will, ist, wenn ich die JTable-Zeile auswählen, um das Objekt in der Array-Liste des Benutzers gespeichert zu bekommen, so dass ich sie ändern oder löschen kann.

Auschecken Table Row Model für eine schrittweise Anleitung zum Erstellen der benutzerdefinierten TableModel. Es enthält alle Methoden, die Sie zum dynamischen Hinzufügen, Zugreifen auf und Löschen von Objekten aus dem TableModel benötigen.

+0

Ich muss die meisten meiner Code für diese neu schreiben, denke ich, und ich weiß nicht, ob ich die gleiche Methode im tun kann Klasse mit allen Daten, die serialisiert sind, so dass ich sie später in Dateien und Objekten speichern kann ... aber ich werde versuchen, zu sehen, wo ich hin kann ... – Dan

Verwandte Themen