是否可以使用一个对象在JTable字段中显示不同的数据?

时间:2013-11-29 18:44:59

标签: java swing jtable

因为在JTable中显示的内容是存储对象的toString,是否有可能显示其他信息?

例如,如果我有一个像这样的简单用户对象:

用户

class User {
  private String firstname; 
  private String lastname;
  ... 
}

我可以在JTable的专栏中显示firstlast名称属性吗?

像这样:

enter image description here

目前,我将User对象的字符串属性存储在JTable而不是User对象本身中。

e.g。

// where first/lastname are the strings retrieved 
// via getFirstname() and getLastname() on the User object. 
model.addRow(new Object[] {first, last });

然而,这个问题是我需要检索和构建用户在JTable中单击的Object时所涉及的所有书籍。是否可以将User对象存储在JTable中,但是根据它所在的列显示不同的属性?

1 个答案:

答案 0 :(得分:2)

是的。只需为每列定义不同的TableCellRenderer

User user = new User("Zack", "Yoshyaro");

DefaultTableModel model = new DefaultTableModel(new Object[]{"First", "Last"}, 0);
model.addRow(new Object[]{user, user});  // note user must be added for each column, but it's the same object
JTable table = new JTable(model);

TableColumn firstName = table.getColumn("First");
firstName.setCellRenderer(...); // a cell renderer that shows user.getFirstName();

TableColumn lastName = table.getColumn("Last");
lastName.setCellRenderer(...); // a cell renderer that shows user.getLastName();

请参阅Using custom Renderer教程中的How to Use Tables部分。