怎么在一个JPanel中加入一个进度条,显示进程执行状况

simaping 2007-12-13 03:33:37
我的需求是JPanel中有个按钮,点击按钮触发事件,要执行一段处理。由于处理时间长,我想加入一个进度条,点击按钮后显示进度条,同时事件处理执行,执行完毕,进度条消失,请问要怎么做呢?可以实现么?用哪些类?
...全文
255 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjj_cadn 2012-06-07
  • 打赏
  • 举报
回复
关注中,我也遇到同样问题
qianxf2008 2007-12-17
  • 打赏
  • 举报
回复
mark
simaping 2007-12-14
  • 打赏
  • 举报
回复
我点击按钮触发事件,本来应该显示进度条状态,同时我的处理程序运行,但是现在遇到的问题是进度条和处理程序不能同时开始,点击按钮后,进度条总是等处理程序完毕后才出现。我把处理程序注释掉,点击按钮,进度条才会马上出现,这是什么原因呢?怎样让两者同时开始运行?
simaping 2007-12-14
  • 打赏
  • 举报
回复
继续关注,希望各位给点意见,不胜感激
simaping 2007-12-14
  • 打赏
  • 举报
回复
下面是我测试用的两个类,各位帮忙看看,怎么老是输出完毕才显示进程状态?非常感谢
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Test extends JFrame implements ActionListener
{
static JLabel infor;
JButton ok;
Test()
{
infor=new JLabel("");

ok=new JButton("ok");
ok.addActionListener(this);
Container con=getContentPane();
con.add(infor,BorderLayout.CENTER);
con.add(ok,BorderLayout.SOUTH);
setBounds(100,100,100,100);


addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
setVisible(true);
validate();
}
public void actionPerformed(ActionEvent e)
{
Progress Test=new Progress("程式執行中");
Test.start();
for (int i=0;i<1000 ;i++ )
{
int j=i;
System.out.println(j);
}
}
public static void main(String args[])
{
new Test();
}

}

Process.java
import java.io.*;
import java.lang.*;
class Progress extends Thread{
static boolean iterateFlag ;
private String beforeString;
private String endString;
public String info,append;
public Progress(String content){
iterateFlag=true;
setBeforeString(content);
}

public Progress(){
iterateFlag=true;
}

public void setIterateFlag(boolean iterateFlag){
this.iterateFlag=iterateFlag;
}

public boolean isStop(){
return this.iterateFlag;
}

public void setBeforeString(String content){
this.beforeString=content + "|";
}

public String getBeforeString(){
return beforeString;
}

public void setEndString(String endstring){
this.endString=endString;
}

public void run(){

try{
info=getBeforeString();
Test.infor.setText(info);
while(isStop())
{
int i;
for(i=1;i<=4;i++){
switch(i){
case 1:
append=".";
Test.infor.setText(info+append);
Thread.currentThread().sleep(100);
break;
case 2:
append="...";
Test.infor.setText(info+append);
Thread.currentThread().sleep(100);
break;
case 3:
append=".....";

Test.infor.setText(info+append);
Thread.currentThread().sleep(100);
break;
case 4:
append=".......";

Test.infor.setText(info+append);
Thread.currentThread().sleep(100);
break;
}

}
}

}catch(Exception ex){
ex.printStackTrace();
}
}
simaping 2007-12-14
  • 打赏
  • 举报
回复
事件actionPerformed(ActionEvent e)的第一句就是new Process().start() ;
angues1980 2007-12-14
  • 打赏
  • 举报
回复
代码怎么写的?

是不是把复制处理那句写在new Process().start() 前面了?
simaping 2007-12-14
  • 打赏
  • 举报
回复
我是在定义了个Process类,继承了Thread,里面有run(),然后在Panel中的按钮事件中new Process().start()
可还是
进度条总是等处理程序完毕后才出现
angues1980 2007-12-14
  • 打赏
  • 举报
回复
进度条是要开新的线程来实现地~
xlbc 2007-12-14
  • 打赏
  • 举报
回复
留个记号~关注
wnlwcg 2007-12-13
  • 打赏
  • 举报
回复
你已经够幸运的了 我的帖子 一个回答的人都没有
simaping 2007-12-13
  • 打赏
  • 举报
回复
先谢谢楼上的建议,我先试下!
如果我想让这个进度条类可以被多个类使用,要是写成内部类就要写好多个,除了这种方法还可以用其他的方法么?
canyangruxie 2007-12-13
  • 打赏
  • 举报
回复
这不难实现,可以把进度条的显示作为一个单独的线程,单击按钮后,创建并执行该线程!

举一个例子:实现一个文件复制操作,单击"复制"按钮,用进度条显示进度.步骤如下:
1,定义一个FileCopy类,该类继承JFrame
2,定义一个ProgressBar类,该类继承Thread,并且该类最好要作为FileCopy类的内部类定义,因为内部类可以访问外部类的成员
3,在FileCopy类的"复制"按钮的单击事件中,除了执行文件复制动作外,还要加上一句代码:new ProgressBar().start();

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧