如何从 JTable 获取存储的对象



我有一个JTable,我可以在其中添加具有年龄,姓名等多个属性的用户。这有效,用户被添加到我的数组列表和 JTable 中。 现在我想要的是当我选择 JTable 行时,能够获取存储在用户 arrayList 中的对象,以便我可以修改或删除它们。

以下是我将用户添加到 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("");
}   

编辑: 以下是删除已在工作的用户的代码:

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.");
}  

这是用于更新仍然不起作用的用户的代码,我试图从 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.");
}   

任何人都可以在这方面给我一些帮助吗?谢谢!

您可以使用与此类似的东西。 遗憾的是,您没有指定要如何编辑用户。

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)
}

您的方法应如下所示:

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.");

用户被添加到我的数组列表和JTable中。

不要将数据存储在两个不同的位置。数据应仅存储在JTableTableModel中。

因此,您可以创建自定义"User"对象以包含有关每个用户的数据。然后,您可以创建一个自定义TableModel来保存"User"对象,该对象可以由JTable显示和访问。

现在我想要的是当我选择 JTable 行时,能够获取存储在用户 arrayList 中的对象,以便我可以修改或删除它们。

查看表行模型,了解创建自定义TableModel的分步方法。它包含从TableModel动态添加,访问和删除对象所需的所有方法。

最新更新