繁体   English   中英

JTable 未显示自定义表 model 中的数据

[英]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 并返回数据中的行数,这里是您的链表的大小。

问题未解决?试试以下方法:

JTable 未显示自定义表 model 中的数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM