在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();
}
}
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();
}
}
解决方案 »
- 深入探讨java类加载器
- JTextField子窗口数据录入出现了问题
- Spring Mock中如何映射webapp的物理路径
- 内部类中为什么不能声明类变量与类方法呢???
- 字符转数组问题,帮忙解答
- 关于多个数据表SQL查询分页问题
- 请问JTextField 和TextField有什么区别?
- Enumeration对象还有元素,执行hasMoreElements返回false,内有测试源码
- 请问要如何选中一条直线
- Norwaywoods(挪威的森林),谢谢你,请来拿分呀,天,送分都这么难!!!
- JFrame.setDefaultLookAndFeelDecorated(true);
- JDBC数据缓冲问题,GOOGLE里也没有找到解决方案,有高手没
scrollPane.getViewport().add(table); // 重置了整个表格UI,当然有可能闪烁 不需要new table
但是可以new一个model,然后table.setModel(model);
在private JTable table=null;
tableModel = new JTableModel(GuiConstant.COLUMN_NAME_F);
table.setModel(model);
?