在UpdateTableThread 这个线程对Jtable中每行数据进行刷新,但是闪烁很厉害,而且表头也一齐刷新。请问怎么解决这个问题。
public class UpdateTableThread extends Thread {

private JScrollPane scrollPane = null;

private JTable table=null;
public static JTableModel tableModel=null;

private Logger log = Logger.getLogger(this.getClass());
public JScrollPane getScrollPane() {
return scrollPane;
} public void setScrollPane(JScrollPane scrollPane) {
this.scrollPane = scrollPane;
}    /**
     * 刷新数据线程
     */
    public void run() { while (true) {
try {
sleep(1000);
} catch (InterruptedException e) {

log.error(this.getClass()+"run()"+e.getMessage());
}
setDataToTable(); }
}    /**
     * 刷新正在上传的数据
      */
public synchronized void setDataToTable() {
Hashtable obj = BufferData.upLoadingVec;
    Iterator itr = obj.keySet().iterator();
    tableModel = new JTableModel(GuiConstant.COLUMN_NAME_F);
    table = new JTable(tableModel);
//设置表宽
    tableModel.setColumnsSize(table, 0, false, 50);// add
    tableModel.setColumnsSize(table, 1, false, 250);// add
    tableModel.setColumnsSize(table, 2, false, 50);// add
    tableModel.setColumnsSize(table, 3, false, 50);// add
    tableModel.setColumnsSize(table, 4, false, 50);// add
    tableModel.setColumnsSize(table, 5, false, 50);// add
    scrollPane.getViewport().add(table);     while (itr.hasNext()) {
      String index = (String) itr.next();
      tableModel.addRow((Object[]) obj.get(index));
    }
//     tableModel.fireTableDataChanged();
}
}

解决方案 »

  1.   


     scrollPane.getViewport().add(table); // 重置了整个表格UI,当然有可能闪烁 不需要new table
     但是可以new一个model,然后table.setModel(model);
      

  2.   

    那代码怎么改呢?
    在private JTable table=null;
     tableModel = new JTableModel(GuiConstant.COLUMN_NAME_F);
     table.setModel(model);

      

  3.   

    为什么每次setDataToTable的时候都要重新new一个table呢?直接修改model里面的数据应该可以的。