java 如何在 JTable 行中设置自定义对象
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12559287/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to set a custom object in a JTable row
提问by shan
I should tell this first, this is NOT about Rendering a Table cell.
我应该先说明这一点,这与渲染表格单元格无关。
Here is the TableModel that i'm building using a 2D array based on a User
object in my DB.
这是我使用基于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);
My problem is how can i get a User
object back, using the selected row in the Table. Note that i can't make a new User
object and populate it with the row data. I must get the queried User
object(objects in userList
). So, is their any way to set a Object with a table row ?
我的问题是如何User
使用表中的选定行取回对象。请注意,我无法创建新User
对象并使用行数据填充它。我必须得到被查询的User
对象(对象 in userList
)。那么,他们有没有办法用表格行设置对象?
Here is my VstTableItemModel
class.
这是我的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];
}
}
回答by MadProgrammer
Instead of splitting the User
object up before you create the model, add it directly to the model and allow the model to do the work for you...
不要User
在创建模型之前拆分对象,而是将其直接添加到模型中并让模型为您完成工作......
For example
例如
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);
}
}
This way, you should be able to do something like...
这样,你应该能够做一些像......
List<User> userList = userManagerService.getAllUsers();
VstTableItemModel tiModel = new VstTableItemModel(userList);
Now when you need to...you can grab a the user that is represent at a specific row...
现在,当您需要...时,您可以获取代表在特定行的用户...
User user = tiModel.getUserAt(rowIndex);