JTable未显示来自自定义表模型的数据



我有一个JTable,它应该显示模型中存在的数据,该模型是一个扩展DefaultTableModel的自定义类。它应该从一个空白表开始,这很有效,但不幸的是,每当我尝试添加新行时,似乎没有将模型正确分配给JTable(数据根本不会显示在JTable上(。

这是TableOrdersModel:

public class TableOrdersModel extends AbstractTableModel{
String tableHeaders[] = {"KATEGORIJA", "NAZIV", "CENA", "KOLIČINA"}; 
private LinkedList<Product> products;
private DefaultTableModel tableModel;
public TableOrdersModel(LinkedList<Product> products) {
this.tableModel = new DefaultTableModel(0, tableHeaders.length);
this.tableModel.setColumnIdentifiers(tableHeaders);
this.products = products;
}
public void addRow(Product product) {
products.add(product);
tableModel.addRow(new Object[]{product.getCategory(), product.getName(), product.getPrice(), product.getQuantity()});
}
@Override 
public int getColumnCount() { 
return tableHeaders.length; 
} 
@Override 
public String getColumnName(int index) { 
return tableHeaders[index]; 
}
@Override
public void setValueAt(Object value, int row, int col) {
fireTableCellUpdated(row, col);
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Object value = null;
Product product = products.get(rowIndex);
switch (columnIndex) {
case 0:
value = product.getCategory();
break;
case 1:
value = product.getName();
break;
case 2:
value = product.getPrice();
break;
case 3:
value = product.getQuantity();
break;
default:
System.err.println("ERROR: Invalid column index.");
}
return value;
}
public Product getProductAt(int row) {
return products.get(row);
}
@Override
public int getRowCount() {
return products.size();
}

}

以下是我如何分配它:

void displayOrdersForThisTable(Table selectedTable) {
LinkedList<Product> products = selectedTable.getOrders();
Iterator<Product> it = products.iterator();

TableOrdersModel tableModel = (TableOrdersModel) table.getModel();

while(it.hasNext()) {
Product productIterator = it.next();
tableModel.addRow(productIterator);
}

以下是JTable的初始化方式:

private JTable getTable() {
if (table == null) {
TableOrdersModel tableModel = new TableOrdersModel(new LinkedList<Product>());
table = new JTable(tableModel) {
public boolean editCellAt(int row, int column, java.util.EventObject e) {
return false;
}
};
table.setFont(new Font("Segoe UI", Font.PLAIN, 18));
}
return table;
}

此外,我使用自定义模型的原因是因为这篇文章(如何在JTable行中设置自定义对象(,我想将整行作为对象(在本例中是类Product的实例(检索,而不是必须从同一行检索每个单元格并将其组合成一个Product。

任何帮助都将不胜感激!

您的模型总是从其getRowCount()方法返回0,并且使用此模型生成的JTable将永远不会显示任何数据行。相反,如果您要重写DefaultTableModel,那么最好不要重写此方法。让super的对象处理它。

此外,您正试图为模型使用两个数据核,super的内部Vector以及您自己的Product链表,这是不好的。要么使用super的数据,要么扩展AbstractTableModel。如果确实扩展了抽象模型,那么是的,覆盖getRowCount并返回数据中的行数,这里是链表的大小。

最新更新