在线等!!!swing Jtable 单元格编辑后,数据自动保存并更新到数据库中???

时间:2021-09-06 14:50:40
使用环境如下:
首先,点击查询按钮,从数据库中提取所有记录填充到Jtable中,
然后,Jtable表格中的单元格都是可以编辑的,编辑单元格后,数据自动保存到Jtable单元格中,并同时更新到数据库中,
最后,点击查询按钮,重新从数据库中提取所有记录填充到Jtable中

 public class KpiMetadataMappingTableModel extends AbstractTableModel
    {
        private Vector<UrmKpiMetadataMappingItem> kpiMetadata = new Vector<UrmKpiMetadataMappingItem>();
        private String[] columns =
        {
            "111", "222", "333", "444", "555", "666", "777", "888", "999", "110"
        };
       

        public UrmKpiMetadataMappingItem getRow(int row)
        {
            return kpiMetadata.get(row);
        }

        @Override
        public int getRowCount()
        {
            return kpiMetadata.size();
        }

        @Override
        public int getColumnCount()
        {
            return columns.length;
        }

        public String getColumnName(int col)
        {
            return columns[col];
        }

        @Override
        public Object getValueAt(int row, int column)
        {
            UrmKpiMetadataMappingItem kpiMetadataMappingItem = kpiMetadata.get(row);

            switch (column)
            {
                case 0:
                    return kpiMetadataMappingItem.getKpiId();
                case 1:
                    return kpiMetadataMappingItem.getDeviceId();
                case 2:
                    return kpiMetadataMappingItem.getAlarmId();
                case 3:
                    return kpiMetadataMappingItem.getParameterId();
                case 4:
                    return kpiMetadataMappingItem.getIsAlarm();
                case 5:
                    return kpiMetadataMappingItem.getDeviceType();
                case 6:
                    return kpiMetadataMappingItem.getPageIndex();
                case 7:
                    return kpiMetadataMappingItem.getParameterIndex();
                case 8:
                    return kpiMetadataMappingItem.getBoardName();
                case 9:
                    return kpiMetadataMappingItem.getManufacture();
            }
            return "";
        }

        public boolean isCellEditable(int row,int col)
        {
            return true;
        }
        
        public void setValueAt(Object newValue,int row,int col)
        {
            // 这里边的代码如何写
            代码越详细越好
            ?????            
        }
        
        public Vector<UrmKpiMetadataMappingItem> getData()
        {
            return kpiMetadata;
        }

}

3 个解决方案

#1



@Override
public void setValueAt(Object newValue,int row,int col) {
  
  UrmKpiMetadataMappingItem item = kpiMetadata.get(row);
  String val = String.valueOf(newValue);
  
  switch(column) {
    
    case 0 : 
      item.setKpiId(Integer.parseInt(val));
      break;
      
    case 1 :
      item.setDeviceId(Integer.parseInt(val));
      break;
    
    // ...
    
    case 8:
      item.setBoardName(val);
      break;
      
    // ...
    
    default :
      throw new IndexOutOfBoundsException();
  }
  
  updateRecordInDatabase(item);
  fireTableDataChanged();
}

#2



void updateRecordInDatabase(final UrmKpiMetadataMappingItem item) {

  new SwingWorker<Void, Void>() {
    
    @Override
    protected Void doInBackground() {
      
      // 根据 item,取得/生成合适的SQL语句
      // 更新数据库
      return null;
    }
    
    @Override
    protected void done() {
      
      // (不是必须)通过GUI界面用合适的方式告诉用户数据库已更新
    }
  }.execute();
}

#3


Thanks!

#1



@Override
public void setValueAt(Object newValue,int row,int col) {
  
  UrmKpiMetadataMappingItem item = kpiMetadata.get(row);
  String val = String.valueOf(newValue);
  
  switch(column) {
    
    case 0 : 
      item.setKpiId(Integer.parseInt(val));
      break;
      
    case 1 :
      item.setDeviceId(Integer.parseInt(val));
      break;
    
    // ...
    
    case 8:
      item.setBoardName(val);
      break;
      
    // ...
    
    default :
      throw new IndexOutOfBoundsException();
  }
  
  updateRecordInDatabase(item);
  fireTableDataChanged();
}

#2



void updateRecordInDatabase(final UrmKpiMetadataMappingItem item) {

  new SwingWorker<Void, Void>() {
    
    @Override
    protected Void doInBackground() {
      
      // 根据 item,取得/生成合适的SQL语句
      // 更新数据库
      return null;
    }
    
    @Override
    protected void done() {
      
      // (不是必须)通过GUI界面用合适的方式告诉用户数据库已更新
    }
  }.execute();
}

#3


Thanks!