[英]JTable not showing data from custom table model
我有 JTable 应该显示 model 中存在的数据,它是扩展 DefaultTableModel 的自定义 class。 它应该从一个空白表开始,并且可以工作,但不幸的是,每当我尝试添加新行时,似乎 model 没有正确分配给 JTable (数据根本没有出现在 Z812E97477B18204F5134B7B7 上)。
这是TableOrdersModel :
public class TableOrdersModel extends DefaultTableModel implements TableModel {
String tableHeaders[] = {"KATEGORIJA", "NAZIV", "CENA", "KOLIČINA"};
private LinkedList<Product> products;
public TableOrdersModel(LinkedList<Product> products) {
this.products = products;
}
@Override
public int getColumnCount() {
return tableHeaders.length;
}
@Override
public String getColumnName(int index) {
return tableHeaders[index];
}
public void addRow(Product product) {
products.add(product);
}
@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 0;
}
}
这就是我试图分配它的方式:
void displayOrdersForThisTable(Table selectedTable) {
LinkedList<Product> products = selectedTable.getOrders();
Iterator<Product> it = products.iterator();
TableOrdersModel tableModel = (TableOrdersModel) table.getModel();
tableModel.setRowCount(0);
int quantity;
while(it.hasNext()) {
Product productIterator = it.next();
tableModel.addRow(productIterator);
}
table.setModel(tableModel);
}
Also, the reason why I'm using a custom model is because of this post ( How to set a custom object in a JTable row ) where I want to retrieve whole row as a Object (in this case an instance of class Product) instead不必从同一行检索每个单元格并将其拼凑成一个产品。
非常感谢任何帮助,谢谢!
您的 model 始终从其getRowCount()
方法返回 0,并且使用此 model 制作的 JTable 将不会显示任何数据行。 相反,如果您要覆盖 DefaultTableModel,那么最好不要覆盖此方法。 让超的object来处理吧。
另外,您尝试将两个数据核用于 model、super 的内部 Vector 以及您自己的 Product 链表,这并不好。 要么使用 super 的数据,要么扩展 AbstractTableModel。 如果您确实扩展了抽象 model,那么是的,覆盖 getRowCount 并返回数据中的行数,这里是您的链表的大小。
问题未解决?试试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.