gpt4 book ai didi

java - 如何在 JTable 行中设置自定义对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:44:50 25 4
gpt4 key购买 nike

我应该首先说明这一点,这与渲染表格单元格无关。

这是我使用基于数据库中的 User 对象的二维数组构建的 TableModel。

    List<User> userList = userManagerService.getAllUsers();

/* String[] col_user = {"Username", "Name", "Phone", .... } */
String[][] data = new String[userList.size()][col_user.length];
int i = 0;
for (User user : userList) {
String[] userdata = new String[col_user.length];
userdata[0] = user.getUserUsername();
userdata[1] = user.getUserName();
userdata[2] = user.getUserPhone();
userdata[3] = user.getUserNic();
userdata[4] = user.getUserAddress();
userdata[5] = user.getUserEmail();

data[i++] = userdata;
}

VstTableItemModel tiModel = new VstTableItemModel(data, col_user);
dataTable.setModel(tiModel);

我的问题是如何使用表中的选定行取回 User 对象。请注意,我无法创建新的 User 对象并用行数据填充它。我必须获取查询的 User 对象(userList 中的对象)。那么,他们有什么方法可以用表格行设置对象吗?

这是我的 VstTableItemModel 类。

public class VstTableItemModel extends AbstractTableModel {

ArrayList<Object[]> data;
String[] header;

public VstTableItemModel(Object[][] obj, String[] header) {
this.header = header;
data = new ArrayList<Object[]>();

for (int i = 0; i < obj.length; ++i) {
data.add(obj[i]);
}
}

@Override
public int getRowCount() {
return data.size();
}

@Override
public int getColumnCount() {
return header.length;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return data.get(rowIndex)[columnIndex];
}

@Override
public String getColumnName(int index) {
return header[index];
}

}

最佳答案

与其在创建模型之前拆分 User 对象,不如将其直接添加到模型中并让模型为您完成工作...

例如

public class VstTableItemModel extends AbstractTableModel {

private List<User> users;

public VstTableItemModel(List<User> users) {

this.users = new ArrayList<User>(users);

}

@Override
public int getRowCount() {
return users.size();
}

@Override
public int getColumnCount() {
return 6;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {

Object value = "??";
User user = users.get(rowIndex);
switch (columnIndex) {
case 0:
value = user.getUserUsername();
break;
case 1:
value = user.getUserName();
break;
case 2:
value = user.getUserPhone();
break;
case 3:
value = user.getUserNic();
break;
case 4:
value = user.getUserAddress();
break;
case 5:
value = user.getUserEmail();
break;
}

return value;

}

@Override
public Class<?> getColumnClass(int columnIndex) {
return // Return the class that best represents the column...
}

/* Override this if you want the values to be editable...
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
//....
}
*/

/**
* This will return the user at the specified row...
* @param row
* @return
*/
public User getUserAt(int row) {
return users.get(row);
}

}

通过这种方式,您应该能够执行类似...

List<User> userList = userManagerService.getAllUsers();
VstTableItemModel tiModel = new VstTableItemModel(userList);

现在,当您需要时...您可以抓取代表特定行的用户...

User user = tiModel.getUserAt(rowIndex);

关于java - 如何在 JTable 行中设置自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12559287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com