如何避免数组重复添加列并重置DefaultTableModel为默认值?
问题1:如何避免向表格模型重复添加列
要解决这个问题,核心是不要每次加载数据时都重新创建表格模型并重复设置列标识符,而是复用现有模型或者先判断列是否已存在。这里给你两种常用方案:
方案1:复用现有表格模型,仅清空行数据
如果你的表格列结构固定,不需要改变,每次加载新数据时只需要清空旧行,再添加新数据即可,这样就不会重复添加列:
public void finduserday(){ ArrayList<dayday> list = userlistdaysearch (((JTextField)jDateChooser_searchdate.getDateEditor().getUiComponent()).getText()); DefaultTableModel model2; // 检查表格是否已有DefaultTableModel实例 if (jTable_dayday.getModel() instanceof DefaultTableModel) { model2 = (DefaultTableModel) jTable_dayday.getModel(); // 清空现有行,保留列结构 model2.setRowCount(0); } else { // 第一次加载时创建模型并设置列(只执行一次) model2 = new DefaultTableModel(); model2.setColumnIdentifiers(new Object[]{"Order_ID","Description","Quantity","Amount","Order_Time","Cost"}); } Object [] row= new Object[6]; for(int i=0;i<list.size();i++){ row[0]=list.get(i).getOrder_ID(); row[1]=list.get(i).getDescription(); row[2]=list.get(i).getQuantity(); row[3]=list.get(i).getAmount(); row[4]=list.get(i).getOrder_Time(); row[5]=list.get(i).getCost(); model2.addRow(row); } jTable_dayday.setModel(model2); }
方案2:创建模型时先判断列是否已存在
如果你必须创建新模型,可以先检查列标识符是否已经设置,避免重复添加:
public void finduserday(){ ArrayList<dayday> list = userlistdaysearch (((JTextField)jDateChooser_searchdate.getDateEditor().getUiComponent()).getText()); DefaultTableModel model2 = new DefaultTableModel(); // 仅当模型没有列时才设置列标识符 if (model2.getColumnCount() == 0) { model2.setColumnIdentifiers(new Object[]{"Order_ID","Description","Quantity","Amount","Order_Time","Cost"}); } Object [] row= new Object[6]; for(int i=0;i<list.size();i++){ row[0]=list.get(i).getOrder_ID(); row[1]=list.get(i).getDescription(); row[2]=list.get(i).getQuantity(); row[3]=list.get(i).getAmount(); row[4]=list.get(i).getOrder_Time(); row[5]=list.get(i).getCost(); model2.addRow(row); } jTable_dayday.setModel(model2); }
问题2:移除自定义列标识符,使用表格模型默认值
如果你想移除model2.setColumnIdentifiers(...)这行代码,让表格模型使用默认的列设置(默认列名为A、B、C...以此类推),只需要修改模型的创建方式,指定列数即可。这里有两种实现方式:
方式1:创建指定列数的默认模型
直接在创建DefaultTableModel时指定初始行数为0,列数为6(对应你的数据列数),这样模型会自动生成默认列名:
public void finduserday(){ ArrayList<dayday> list = userlistdaysearch (((JTextField)jDateChooser_searchdate.getDateEditor().getUiComponent()).getText()); // 创建默认表格模型,参数:初始行数,列数 DefaultTableModel model2 = new DefaultTableModel(0, 6); Object [] row= new Object[6]; for(int i=0;i<list.size();i++){ row[0]=list.get(i).getOrder_ID(); row[1]=list.get(i).getDescription(); row[2]=list.get(i).getQuantity(); row[3]=list.get(i).getAmount(); row[4]=list.get(i).getOrder_Time(); row[5]=list.get(i).getCost(); model2.addRow(row); } jTable_dayday.setModel(model2); }
方式2:复用现有模型的默认列结构
如果表格已经有默认模型,直接清空行再添加新数据,不需要重新创建模型:
public void finduserday(){ ArrayList<dayday> list = userlistdaysearch (((JTextField)jDateChooser_searchdate.getDateEditor().getUiComponent()).getText()); DefaultTableModel model2; if (jTable_dayday.getModel() instanceof DefaultTableModel) { model2 = (DefaultTableModel) jTable_dayday.getModel(); model2.setRowCount(0); // 清空旧数据 // 如果模型列数不够,调整列数到6 if (model2.getColumnCount() != 6) { model2.setColumnCount(6); } } else { model2 = new DefaultTableModel(0, 6); } Object [] row= new Object[6]; for(int i=0;i<list.size();i++){ row[0]=list.get(i).getOrder_ID(); row[1]=list.get(i).getDescription(); row[2]=list.get(i).getQuantity(); row[3]=list.get(i).getAmount(); row[4]=list.get(i).getOrder_Time(); row[5]=list.get(i).getCost(); model2.addRow(row); } jTable_dayday.setModel(model2); }
内容的提问来源于stack exchange,提问作者Kushan Rajeendra
相关产品推荐
相关产品推荐

