懂swing的朋友看看,火急求助

时间:2021-02-27 21:25:53
otherinfo 表 存一个数据:
oid  onumber  oname
32     0      是否有数据更新(1就是有,其他则为没有)

事件监听:如果有合法的数据,直接把 oid的onumber值改为1.

窗口:
构造方法里有一个定时器:
定时器定时查询oid=32的onumber值。
如果数据为1,这把界面的方法放在定时器里,用以更新窗口,更新后把oid=32的值改为0。继续监听事件。

数据不为1,就是直接调用窗口,不需要更新界面。上代码:

监听窗口:
                if(......)
                { 
                  other obb=new other();
     obb.setOname("是否有数据更新");
       obb.setOid(32);
     obb.setOnumber(""+1);
     odao.updateOther(obb); 
                }


数据窗口:
      class AFrame()
       {
        int ttime;
           final otherDAO odao=new otherDAO();
   java.util.Timer timer = new java.util.Timer();
  timer.schedule(new TimerTask() {
        public void run() { 
        try
           {   
 if(Integer.parseInt(odao.selectNumberById(32))==1)
           {
  System.out.println("调用了.......");
           jbInit(); 
             }  
           }
        catch(Exception ex)
           {
            ex.printStackTrace();
           }
         other obb=new other();
         obb.setOname("是否有数据更新");
   obb.setOid(32);
   obb.setOnumber(""+0);
   odao.updateOther(obb);   
    }
    }, 0, 2000); 
    if(Integer.parseInt(odao.selectNumberById(32))==0)
    { 
      try {
    jbInit();//窗口数据方法
 } catch (Exception e) {
    e.printStackTrace();
 } 
    }
      }

  .........
   private void jbInit() throws Exception
  {
 ..... 
  }



理论上这样应该是没什么问题的,结果测试的时候,发现不能100%窗口数据更新,而且已经调用了jbInit(),并输出了"调用了.....",但是数据却并没有更新,想问问大侠们,问题出在哪?
而且发现swing的dispose()方法只是关闭当前窗口,里面的组件并没有销毁,当另一个窗口应用同样的方法,同时通过oid=32的值来判断是否调用定时器的代码的时候,输出的数据是,两个窗口都通过Timer更新了窗口,都调用了,但是当关闭当前窗口,打开新的窗口是,把全局的JPanel的jp.removeAll();并没有产生效果。表示很纠结。而且,当我关闭当前窗口,浏览别的窗口后,再放回需要更新数据的窗口的时候,数据可能需要监听到多次数据后才能更新,很是想不明白。swing,做起来还是比较难啊。

5 个解决方案

#1


或许有点明白了,郁闷中

#2


这个你需要在调用更新表格代码后,再使用table容器对象 tabObject.repaint()方法重绘一下,这是界面缓存的问题,如果不行就在调用表格容器的父容器的repaint()方法重绘。

#3


明天试试,我都是每次调用jbInit()的时候,都把之前的JPanel.removeAll().

#4


该回复于2012-03-26 08:54:40被版主删除

#5


引用 4 楼 mkplay 的回复:
学习了


汗.........

#1


或许有点明白了,郁闷中

#2


这个你需要在调用更新表格代码后,再使用table容器对象 tabObject.repaint()方法重绘一下,这是界面缓存的问题,如果不行就在调用表格容器的父容器的repaint()方法重绘。

#3


明天试试,我都是每次调用jbInit()的时候,都把之前的JPanel.removeAll().

#4


该回复于2012-03-26 08:54:40被版主删除

#5


引用 4 楼 mkplay 的回复:
学习了


汗.........