显式编写一个用于将数据插入 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 实现,它允许您使用域对象,CategoryProduct 或任何您需要的实体。

看看这些主题:

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 时重新绘制/刷新

如何将数据(实际上是 Jtable 数据)添加到数据库中。有没有办法使用preparedstmt将对象插入数据库?

如何从jtable插入数据库?

jTable beansbinding

如何在单击JButton后刷新JTable

swing 怎样实现表格内容刷新