我有 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 的實體)不必從同一行檢索每個單元格并將其拼湊成一個產品。
非常感謝任何幫助,謝謝!
uj5u.com熱心網友回復:
您的模型始終從其getRowCount()方法回傳 0,并且使用此模型制作的 JTable 將不會顯示任何資料行。相反,如果您要覆寫 DefaultTableModel,那么最好不要覆寫此方法。讓 super 的物件處理它。
另外,你試圖為模型使用兩個資料核,超級的內部向量以及你自己的產品鏈表,這并不好。要么使用 super 的資料,要么擴展 AbstractTableModel。如果您確實擴展了抽象模型,那么是的,覆寫 getRowCount 并回傳資料中的行數,這里是您的鏈表的大小。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/511837.html
標籤:爪哇摇摆表
上一篇:paintComponent方法不在RMI瀏覽器中的JPanel上繪制
下一篇:獲得FlatLaf主題的價值
