我有LinkedHashSet
个Book
个对象。 Book
个对象包含以下字段:
private int id;
private String author = "";
private String title = "";
private boolean isRead;
private String dateStamp = "";
private static int counter = 0;
我希望他们进入我的JTable
,其中包含以下列:
String [] columnNames = {"ID","Title", "Author", "Status", "Date Read"};
我该怎么做?是否可以通过表格中的复选框来编辑isRead
字段?
答案 0 :(得分:1)
您需要一个扩展AbstractTableModel
的类。此类应使用您的LinkedHashSet
作为表的数据源。 AbstractTableModel
提供的基本实现应该适合您的大部分需求。如果没有,那么您可以覆盖自定义所需的方法。
此tutorial应该可以帮助您了解JTable
对象的工作原理。
答案 1 :(得分:1)
这是我为表创建的示例模型。
public class CustomModel extends AbstractTableModel {
private Object[] colNames ={"ID","Title", "Author", "Status", "Date Read"};
private LinkedHashSet<CustomClass> data;
public TableModelTop() {
this.data = getDataForDropList();
}
public int getRowCount() {
return data.size();
}
public int getColumnCount() {
return colNames.length;
}
@Override
public String getColumnName(int columnIndex) {
return (String) colNames[columnIndex];
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
// Set Values here;
}
public Object getValueAt(int rowIndex, int columnIndex) {
// Get row Values here;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
// Depending on the type of the column. Return data type;
}
/**
* Populate the data from here.
* @return LinkedHashSet<CustomClass>
*/
private LinkedHashSet<CustomClass> getDataForDropList() {
LinkedHashSet<CustomClass> modelList = new LinkedHashSet<CustomClass>();
for(int i = 0; i< 5; i++) {
// Create custom Object and add them to the LinkedHashSet.
// Create a CustomClass object and add it to the LinkedHashSet
modelList.add(customClassObject);
}
// Finally return the llinkedhashset
return modelList;
}
}
之后只需调用表模型并将其分配给JTable。
JTable table = new JTable(new CustomModel());
答案 2 :(得分:1)
作为使用AbstractTableModel
的具体示例,您可以利用toArray()
继承的LinkedHashSet
方法来简化getValueAt()
的实施,如相关JTable
所示。 3}}。对于JCheckBox
类型的TableModel
元素,默认Boolean.class
EnvTableTest
使用{{1}},如此renderer and editor所示。