JTable动态刷新内容

    搞了很久,一直不知道怎么让表格中的内容动态更新,今天终于弄出来了。
   场景描述:
有这么一张表格,下面有添加、删除等操作。
JTable动态刷新内容

点击下面的添加后出现添加子窗口
JTable动态刷新内容
点击添加子窗口的“添加”后,主界面的表格立马出现刚刚添加的。
删除效果一样,点击删除,主界面中对应的记录马上消失。

解决方法:
  在主界面 设立一个状态变量 A 判断是否更新。在主界面使用一个线程,不停循环用于专门监听A的值。
  规定:当变量 A 等于特定值(1)时刷新。
  在调用子窗体(添加子窗体)时,传递对象引用。将主界面 Panel 的那个对象( UpdateMenue.this )作为参数给子窗体,子窗体对“对象. A” 进行修改。主界面开个子进程,一直对 A 进行判断,一旦 A 变为特定的值就刷新。

代码:
  主class中定义状态变量
public int Updat=0;  
析构函数中打开监听进程
//开启监听表格状态线程 
listenUpdateThread listenUpdate=new listenUpdateThread(table_1,Updat); 
listenUpdate.start();

进程实现:
//刷新表格进程
class listenUpdateThread  extends Thread{
  public JTable table2;
  int aa;
public listenUpdateThread(JTable table,int a)
 {
    this.table2=table;
    this.aa=a;
 }
public void run()
 {
 while(true)
 {
 if(Updat==1)
{
 model.setRowCount(0);
List list = dao.selectJoinDepot();
        for (int i = 0; i < list.size(); i++) 
                   {
Book depot = (Book)list.get(i);
String dRemark = depot.getRemark();
if(dRemark.length()>4)
                        {
    dRemark = dRemark.substring(0, 4)+"...";
}
model.addRow(new Object[] {depot.getoId(),depot.getdotime(), depot.getdId(),depot.getWareName(),depot.getJoinTime(),depot.getWeight(),dRemark});
}
Updat=0;
 
}
 
 }
 
   
}
 
} }


子窗体中直接将对象作为参数
public InserBookFrame(final BookPanel bp) //子窗体类的析构函数
对应的监听器(确认添加)中修改状态变量bp.Updat=1;

这样就可以动态实时刷新了

你可能感兴趣的:(JAVA)