显式编写 Class 用于将数据插入 JTable Swing
Explicitly writing a Class for inserting Data into JTable Swing
在我的应用程序中,我写了一个 class 将数据插入 JTable。
应用有两个实体 1:类别 2:产品
对于类别,我写了这个 class。当我想在 JTable 中显示数据时,我会根据情况调用此 class 中的任何方法。
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});
}
}
现在我想让这个 class 通用,这样我就可以传递类别对象或产品对象并将数据插入到 table。
我的困惑在于
public void insertCategoriesToTable(JTable tableObject,ArrayList<CategoryEntity> getCategories)
我应该传递什么而不是 ArrayList 以便我可以为两个实体(类别和产品)调用这两种方法。
我不想为产品实体编写相同的 class 并稍作改动。
您可以考虑编写自定义 TableModel
实现,允许您使用领域对象,Category
或 Product
或您需要的任何实体。
看看这些主题:
- Working with several custom table models avoiding repetitive code
- Rob Camick's Row Table Model
通过这种方式,您可以直接添加/删除/更新域对象to/from TableModel
而无需任何其他 class: JTable
[=37] =] 附加到的模型将在 TableModelEvent
上自动重绘。
即使你坚持写一个特定的 class 来做插入,它也可能是这样的,其中 T
是你想要插入到你的 [=37= 中的实体的类型]模型(虽然没有太多好处):
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);
}
}
在我的应用程序中,我写了一个 class 将数据插入 JTable。
应用有两个实体 1:类别 2:产品
对于类别,我写了这个 class。当我想在 JTable 中显示数据时,我会根据情况调用此 class 中的任何方法。
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});
}
}
现在我想让这个 class 通用,这样我就可以传递类别对象或产品对象并将数据插入到 table。
我的困惑在于
public void insertCategoriesToTable(JTable tableObject,ArrayList<CategoryEntity> getCategories)
我应该传递什么而不是 ArrayList 以便我可以为两个实体(类别和产品)调用这两种方法。
我不想为产品实体编写相同的 class 并稍作改动。
您可以考虑编写自定义 TableModel
实现,允许您使用领域对象,Category
或 Product
或您需要的任何实体。
看看这些主题:
- Working with several custom table models avoiding repetitive code
- Rob Camick's Row Table Model
通过这种方式,您可以直接添加/删除/更新域对象to/from TableModel
而无需任何其他 class: JTable
[=37] =] 附加到的模型将在 TableModelEvent
上自动重绘。
即使你坚持写一个特定的 class 来做插入,它也可能是这样的,其中 T
是你想要插入到你的 [=37= 中的实体的类型]模型(虽然没有太多好处):
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);
}
}