gpt4 book ai didi

java - Netbeans,通过拖放 GUI 设计器创建自定义表模型。

转载 作者:行者123 更新时间:2023-12-01 14:09:56 25 4
gpt4 key购买 nike

我有一个用于项目 list 的应用程序,我正在尝试将 JTable 添加到代码中的 JFrame 中。我创建了名为 ItemTableModelAbstractTableModel 对象的扩展。我还将一个 JTable 拖放到 netbeans 中相应 JFrame 的设计器 View 上,并将其重命名为 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 指定我的表模型?如何指定列名称?如果库存发生变化,我如何重新绘制表格以反射(reflect)这一变化? (我计划搜索库存并在此表中显示可能的结果,方法是将其 Inventory 更改为仅包含搜索匹配项的库存)

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

最佳答案

what do I need to call to draw the table?

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

Do I need to specify my table model to netbeans specifically?

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

How do I specify column names?

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

And if something changes in the inventory, how do I redraw the table to reflect this?

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

更好的解决方案是提供一个 add 方法,允许您将新的库存 Item 添加到表中,然后使用 [AbstractTableModel#fireTableRowsInserted]( http://docs.oracle.com/javase/7/docs/api/javax/swing/table/AbstractTableModel.html#fireTableRowsInserted(int , int)) 这将导致表自行更新。

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

(I plan to search the inventory and display possible results in this table by changing its Inventory to one with just the search matches)

看看How to use tables, Sorting and Filtering

Also, I don't need/want to make any cell editable, this table is just for viewing.

您已经将 isCellEditable 重写为 return false,因此应该可以正常工作...

花一些时间阅读 How to use tables了解更多详细信息

关于java - Netbeans,通过拖放 GUI 设计器创建自定义表模型。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18603803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com