0

我有一个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通过表格中的复选框来编辑该字段?

4

3 回答 3

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());
于 2012-11-08T16:03:56.877 回答
1

你需要有一个扩展的类AbstractTableModel。这个类应该使用你的LinkedHashSet作为你的表的数据源。提供的基本实现AbstractTableModel应该可以满足您的大部分需求。如果没有,那么您可以覆盖您需要自定义的方法。

教程应该可以帮助您了解JTable对象是如何工作的。

于 2012-11-08T14:47:15.840 回答
1

作为一个具体的使用例子AbstractTableModel,你可以利用toArray()继承的方法LinkedHashSet来简化实现getValueAt(),如this相关所示EnvTableTest。默认JTable 渲染器和编辑器用于JCheckBox类型TableModel元素Boolean.class,如本所示。

于 2012-11-09T02:47:57.083 回答