我以前做的一个例子,取回数据在jtable显示,可以动态刷新,增加删除。
//定义
ParaInfoModel analogModel=new ParaInfoModel();
jTable jAnalogTable = new JTable(analogModel);//变化
analogModel.updatePara(tempPara);//扩展AbstractTableModel,加自己的方法
class ParaInfoModel extends AbstractTableModel {
    protected  int NUM_COLUMNS = 3;
    protected  int START_NUM_ROWS = 0;
    protected int nextEmptyRow = 0;
    protected int numRows = 0;    static final public String paraName = "参数名称";
    static final public String statusName = "参数状态";
    static final public String valueName = "参数值";    protected Vector data = null;    public ParaInfoModel() {
        data = new Vector();
    }    public String getColumnName(int column) {
switch (column) {
  case 0:
    return paraName;
  case 1:
    return statusName;
  case 2:
    return valueName;
}
return "";
    }    //XXX Should this really be synchronized?
    public synchronized int getColumnCount() {
        return NUM_COLUMNS;
    }    public synchronized int getRowCount() {
        if (numRows < START_NUM_ROWS) {
            return START_NUM_ROWS;
        } else {
            return numRows;
        }
    }    public synchronized Object getValueAt(int row, int column) {
try {
            WebJkPara p = (WebJkPara)data.elementAt(row);
            switch (column) {
              case 0:
                return p.dname;
              case 1:
                return p.status;
              case 2:
                return p.value;
            }
} catch (Exception e) {
}
return "";
    }
    public synchronized void updatePara(WebJkPara paraRecord) {
        int ID = paraRecord.itemNumber; //find the ID
        int index = -1;
        boolean found = false;
boolean addedRow = false;        if (ID!=0){
           found = true;
           index = ID - 1;
         }        if (found) { //update old player
    data.setElementAt(paraRecord, index);
        } else { //add new player
    if (numRows <= nextEmptyRow) {
//add a row
                numRows++;
addedRow = true;
            }
            index = nextEmptyRow;
    data.addElement(paraRecord);
}        nextEmptyRow++; //Notify listeners that the data changed.
if (addedRow) {
    fireTableRowsInserted(index, index);
} else {
    fireTableRowsUpdated(index, index);
}
    }    public synchronized void clear() {
int oldNumRows = numRows;
        numRows = START_NUM_ROWS;
data.removeAllElements();
        nextEmptyRow = 0; if (oldNumRows > START_NUM_ROWS) {
    fireTableRowsDeleted(START_NUM_ROWS, oldNumRows - 1);
}
fireTableRowsUpdated(0, START_NUM_ROWS - 1);
    }
}

解决方案 »

  1.   

    你大概将常规数据类型放置到jtable中去了吧!
    jtable一般只能放object,你可以将其转换为相应的对象类型即可。
      

  2.   

    如果你用jb4的话,用里面给你的dx和dbswing可以很快搞定(但是一个简简单单的dataTable打包下来有1.2MB——数据库是mysql),真让人受不了 :(
    所以呢 ... 看看dx和dbswing的源代码,试着定制一个小点的吧 :)
    --
    另外,还想请教大家,如果纯粹的是借助jdbc和jtable来做,在后台保持一个(或多个?)和数据库同步的线程是好办法吗(有其它的建议吗)?还有就是jtable里我虽然可以知道一个单元的内容是否被动过,可是怎么才能进一步得到具体信息?比如这个单元的内容从A变到了B?