0

我有一个用于物品清单的应用程序,我正在尝试在我的代码中将 JTable 添加到 JFrame 中。我创建了一个AbstractTableModel名为ItemTableModel. 我还将 JTable 拖放到 netbeans 中相应 JFrame 的设计器视图中,并将其重命名为m_jtTable.

public class ItemTableModel extends AbstractTableModel
{
    Inventory inv;
    int rowCount = 0;
    int colCount = 3;

    public ItemTableModel(Inventory in)
    {
        inv = in;
    }

    @Override
    public int getRowCount() 
    {
        return inv.itemList.size();
    }

    @Override
    public int getColumnCount() 
    {
        return colCount;
    }

    @Override
    public boolean isCellEditable(int row, int col) 
    {
        return false;
    }


    @Override
    public Object getValueAt(int rowIndex, int columnIndex) 
    {
        Item it = inv.itemsList.get(rowIndex);
        Object retO = null;
        switch(columnIndex)
        {
            case 0: retO = (Object)it.getItemNumber(); break;
            case 1: retO = (Object)it.getDescription(); break;
            case 2: retO = (Object)it.getPrice(); break;
            default: retO = (Object)new String("null"); break;
        }
        return retO;
    }
}

然后在我的 JFrame 中的一个方法中,加载库存后我有下面的代码

    ItemTableModel data = new ITemTableModel(this.inv);
    m_jtTable.setModel(data);

我有几个问题,我需要调用什么来绘制表格?我是否需要专门为 netbeans 指定我的表模型?如何指定列名?如果库存发生变化,我如何重新绘制表格以反映这一点?(我计划搜索库存并在此表中显示可能的结果,方法是将其更改Inventory为仅包含搜索匹配项的结果)

另外,我不需要/不想使任何单元格可编辑,此表仅供查看。

4

1 回答 1

1

我需要调用什么来绘制表格?

一般来说,什么都没有。如果表格已被添加到可见组件中,设置模型将使用模型的内容自动更新表格

我是否需要专门为 netbeans 指定我的表模型?

虽然您可以在编辑器中“构建”模型,但通常不能。您应该简单地创建模型并将其应用于代码源中的表,但是在initComponent调用之后...

如何指定列名?

有几种方法,但最简单的方法是覆盖该TableModel#getColumnName方法并为请求的索引返回一个适当的名称

如果库存发生变化,我如何重新绘制表格以反映这一点?

这将取决于您的模型是如何实现的。您可以重新创建模型并将其重新应用到表中。

更好的解决方案是提供一种add方法,允许您向表中添加新的 inventory ,然后使用 [ ]( http://docs.oracle.com/javase/7/docs/api/javaxItem引发适当的事件/swing/table/AbstractTableModel.html#fireTableRowsInserted(int , int)) 这将导致表格自行更新。AbstractTableModel#fireTableRowsInserted

如果要更新现有项目,可以使用setValueAt方法目录,或者提供一些方法来告诉模型给定项目已开始更改,例如itemChanged(Item item)需要找到Item代表的行并触发 [ AbstractTableModel#fireTableCellUpdated]( http://docs.oracle.com/javase/7/docs/api/javax/swing/table/AbstractTableModel.html#fireTableCellUpdated(int , int))

(我计划通过将其 Inventory 更改为仅包含搜索匹配项的清单来搜索清单并在此表中显示可能的结果)

看看如何使用表格、排序和过滤

另外,我不需要/不想使任何单元格可编辑,此表仅供查看。

您已经覆盖isCellEditablereturn false,所以这应该可以工作......

花一些时间阅读如何使用表格了解更多详细信息

于 2013-09-04T01:45:02.330 回答