Netbeans,从拖放gui设计师创建自定义表模型。

时间:2013-09-04 00:59:59

标签: java swing netbeans

我有一个用于项目清单的应用程序,我试图在我的代码中将JTable添加到JFrame。我创建了一个名为AbstractTableModel的{​​{1}}对象的扩展名。我还将JTable拖放到netbeans中的设计器视图中,并将其重命名为ItemTableModel

m_jtTable

然后在我的JFrame中的方法中,我在加载库存后得到以下代码

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;
    }
}

我有几个问题,我需要打电话来画桌子?我是否需要专门为netbeans指定我的表格模型?如何指定列名?如果库存中有变化,我该如何重绘表格以反映这一点? (我计划通过将 ItemTableModel data = new ITemTableModel(this.inv); m_jtTable.setModel(data); 更改为只搜索匹配的一个来搜索广告资源并在此表格中显示可能的结果)

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

1 个答案:

答案 0 :(得分:1)

  

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

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

  

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

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

  

如何指定列名?

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

  

如果库存中有变化,我该如何重绘表格   反映这个?

这取决于您的模型实施方式。您可以重新创建模型并将其重新应用到表中。

更好的解决方案是提供add方法,允许您向表中添加新广告资源Item,然后使用[AbstractTableModel#fireTableRowsInserted]({{ {3}},int))这会导致表自行更新。

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

  

(我计划搜索库存并在此显示可能的结果   表格通过将其库存更改为只有搜索匹配的一个)

查看http://docs.oracle.com/javase/7/docs/api/javax/swing/table/AbstractTableModel.html#fireTableCellUpdated(int

  

另外,我不需要/想要任何单元格可编辑,这个表格只是   观看。

您已经isCellEditable覆盖了return false,因此应该有效...

花些时间阅读How to use tables, Sorting and Filtering了解更多详情