Chinaunix

标题: 关于swing事件的一个问题 [打印本页]

作者: ant    时间: 2006-02-22 18:11
标题: 关于swing事件的一个问题
JProcessbar pb = new JPorcessbar
jButton1.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
   process();
});

我在process()里面增加pb.setValue();怎样实时反应到界面上?
现在是事件调用完毕之后才画到界面上。
作者: kakasi    时间: 2006-02-22 18:47
那是因为这两个动作都排在ui线程中了,当然要顺序执行。
解决办法就是 : process()在新线程中执行。并且用timer定时刷ui
作者: ant    时间: 2006-02-22 18:52
能不能给个例子,java刚上手做
作者: kakasi    时间: 2006-02-22 19:05
new Timer(1000, new ActionListener())
{
   public void actionPerformed(ActionEvent evt)
   {
      refresh progressbar
   }
}.start();
new Thread()
{
    public void run
   {
      process()
   }
}.start()
作者: ant    时间: 2006-02-22 19:41
那我只有process()里面才知道真正的进度情况,怎样传给processbar显示正确的进度?
作者: kakasi    时间: 2006-02-23 09:25
process()
{
   for(i)
   {
      this.progressBar.setValue(i);
   }
}
作者: ant    时间: 2006-02-23 09:34
多谢,还有一个问题啊,就是process()这个线程启动是i在我点击的事件里面产生的,那我怎样知道我的process什么时候结束呢?然后停止计时器。
作者: kakasi    时间: 2006-02-23 09:45
最好是传给timer一个回调,在timer的actionPerformed中判断process是否结束




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2