将LinkedHasHSet的内容输出到JTable中

时间:2012-11-08 14:26:04

标签: java swing jtable

我有LinkedHashSetBook个对象。 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字段?

3 个答案:

答案 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所示。