java进度条显示问题

publicclassbarextendsJPanel{privateintintervel=10;staticJProgressBarjBar=newJProgress... public class bar extends JPanel{

private int intervel = 10;
static JProgressBar jBar = new JProgressBar(0,200);
public void action() {
Timer timer = new Timer();
timer.schedule(new TimerTask() {

@Override
public void run() {
setJBar();
repaint();
}
}, intervel, intervel);
}

public void setJBar(){
jBar.setValue(123);
}

public void paint(Graphics g){//为什么重写paint方法后 进度条jBar就不显示了 ?

}

public static void main(String[] args){
JFrame jf = new JFrame();
bar panel = new bar();

jBar.setValue(100);
panel.add(jBar);
jf.add(panel);
jf.setSize(500,700);
jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
jf.setVisible(true);
panel.action();
}
}

为什么不重写paint方法时 在窗口中可以显示进度条 重写paint方法后就不显示进度条了呢?
在重写paint方法的情况下 怎样才能显示进度条? 可不可以使用画笔Graphics画进度条?

谢谢各位了
展开
 我来答
yugi111
2015-09-05 · TA获得超过8.1万个赞
知道大有可为答主
回答量:5.1万
采纳率:70%
帮助的人:1.3亿
展开全部
// 回答完毕,采纳即可

import java.awt.BorderLayout;
import java.awt.Toolkit;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Random;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;

public class Bar extends JPanel implements PropertyChangeListener
{
private static final long serialVersionUID = 1L;

private JProgressBar progressBar;

private Task task;

public Bar()
{
super(new BorderLayout());

progressBar = new JProgressBar(0, 100);
progressBar.setValue(0);
progressBar.setStringPainted(true);

JPanel panel = new JPanel();
panel.add(progressBar);

add(panel, BorderLayout.PAGE_START);
setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
}

class Task extends SwingWorker<Void, Void>
{
@Override
public Void doInBackground()
{
Random random = new Random();
int progress = 0;
setProgress(0);
while(progress < 100)
{
try
{
Thread.sleep(random.nextInt(1000));
}
catch(InterruptedException ignore)
{}
progress += random.nextInt(10);
setProgress(Math.min(progress, 100));
}
return null;
}

@Override
public void done()
{
Toolkit.getDefaultToolkit().beep();
System.exit(0);
}
}

public void propertyChange(PropertyChangeEvent evt)
{
if("progress" == evt.getPropertyName())
{
int progress = (Integer) evt.getNewValue();
progressBar.setValue(progress);
}
}

private void start()
{
task = new Task();
task.addPropertyChangeListener(this);
task.execute();
}

private static void createAndShowGUI()
{
JFrame frame = new JFrame("bar");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Bar b = new Bar();
b.setOpaque(true);
b.start();
frame.setContentPane(b);
frame.pack();
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sniperzhzhy
2015-09-05
知道答主
回答量:16
采纳率:0%
帮助的人:19.5万
展开全部
要在重载的paint方法里调用父类的paint方法(super.paint(g);),你上面代码paint里什么都没做当然就不画任何东西了。
追问
但是我不加paint方法的时候能显示进度条的啊
追答
不加paint方法是会自动调用父类的paint方法的,你现在重载了,就得手动在方法最前面调用父类的paint方法。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式