显式编写一个用于将数据插入 JTable Swing 的类
Posted
技术标签:
【中文标题】显式编写一个用于将数据插入 JTable Swing 的类【英文标题】:Explicitly writing a Class for inserting Data into JTable Swing 【发布时间】:2015-10-07 13:50:41 【问题描述】:在我的应用程序中,我编写了一个将数据插入 JTable 的类。
应用有两个实体 1:类别 2:产品
对于类别我已经写了这个类。当我想在 JTable 中显示数据时,我会根据情况调用此类中的任何方法。
public class InsertDataToTable
public void insertCategoriesToTable(JTable tableObject,ArrayList<CategoryEntity> getCategories)
DefaultTableModel model = (DefaultTableModel) categoryTable.getModel();
model.setRowCount(0);
for (CategoryEntity category : getCategories)
int id = category.getId();
String categoryName = category.getCategoryName();
model.insertRow(categoryTable.getRowCount(), new Object[]id, categoryName);
public void insertSingleCategory(JTable tableObject,CategoryEntity category)
DefaultTableModel model = (DefaultTableModel) categoryTable.getModel();
model.setRowCount(0);
int id=category.getId();
String categoryName=category.getCategoryName();
model.insertRow(categoryTable.getRowCount(), new Object[]id, categoryName);
现在我想将这个类设为通用,以便我可以传递类别对象或产品对象并将数据插入表。
我的困惑在于
public void insertCategoriesToTable(JTable tableObject,ArrayList<CategoryEntity> getCategories)
我应该传递什么而不是 ArrayList 以便我可以为两个实体(类别和产品)调用这两种方法。
我不想为产品实体编写几乎没有更改的相同类。
【问题讨论】:
您正在撰写有关“产品对象”的文章,但我在代码中找不到。你这是什么意思? 【参考方案1】:您可以考虑编写一个自定义的 TableModel
实现,它允许您使用域对象,Category
或 Product
或任何您需要的实体。
看看这些主题:
Working with several custom table models avoiding repetitive code Rob Camick's Row Table Model通过这种方式,您可以直接在TableModel
中添加/删除/更新域对象,而无需任何其他类:表模型所附加到的JTable
将在TableModelEvent
上自动重绘.
即使您坚持编写一个特定的类来进行插入,它也可能是这样的,其中T
是您想要插入到表模型中的实体类型(虽然没有太多好处):
public class InsertDataToTable
public static <T> void insertToTable(JTable table, List<T> domainObjects)
DataObjectTableModel<T> model = (DataObjectTableModel<T>) table.getModel();
model.clearTableModelData();
for (T domainObject : domainObject)
model.addDataObject(domainObject);
public static <T> void insertSingleObject(JTable table, T domainObject)
DataObjectTableModel<T> model = (DataObjectTableModel<T>) table.getModel();
model.clearTableModelData();
model.addDataObject(domainObject);
【讨论】:
非常感谢,请你告诉我什么是 DataObjectTableModel 没有导入它。 不客气。DataObjectTableModel
是您在the answer 中找到的类,指向我包含的第一个链接。请阅读整篇文章,你会发现它实际上就是你要找的。 @MuhammadDanishKhan
抛出类转换异常 javax.swing.table.DefaultTableModel 无法转换为 app.CommonClass.DataObjectTableModel
确保在 在其上插入任何内容之前为您的 JTable 设置一个新的 DataObjectTableModel 实例(默认情况下,JTable 的表模型是 DefaultTableModel)@MuhammadDanishKhan以上是关于显式编写一个用于将数据插入 JTable Swing 的类的主要内容,如果未能解决你的问题,请参考以下文章
JTable 不会在将数据插入 mysql 时重新绘制/刷新