首先,点击查询按钮,从数据库中提取所有记录填充到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!