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
#5
汗.........
#1
或许有点明白了,郁闷中
#2
这个你需要在调用更新表格代码后,再使用table容器对象 tabObject.repaint()方法重绘一下,这是界面缓存的问题,如果不行就在调用表格容器的父容器的repaint()方法重绘。
#3
明天试试,我都是每次调用jbInit()的时候,都把之前的JPanel.removeAll().
#4
#5
汗.........