进度条相信小伙伴们都知道,一些游戏在加载时经常能看见,在编写进度条时有时候因为一些不可抗拒原因出错就需要重绘进度条,下面跟小编看看如何重绘。
代码如下:
package luojing; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.Timer; import java.util.TimerTask; public class NewClass { static JProgressBar jpb = null; static JButton jb = null; public static void main(String args[]) { JFrame frm = new JFrame(); Container contentPane = frm.getContentPane(); jpb = new JProgressBar(); jpb.setOrientation(JProgressBar.HORIZONTAL); jpb.setMaximum(100); jpb.setMinimum(0); jpb.setValue(0); jpb.setStringPainted(true); jpb.setPreferredSize(new Dimension(400, 50)); contentPane.add(jpb, BorderLayout.CENTER); jb = new JButton("开始"); jb.addActionListener(new Change()); contentPane.add(jb, BorderLayout.SOUTH); frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frm.pack(); frm.setTitle("进度条"); // 窗口居中 frm.setLocation((Toolkit.getDefaultToolkit() .getScreenSize() .width - frm.getSize() .width) / 2, (Toolkit.getDefaultToolkit() .getScreenSize() .height - frm.getSize() .height) / 2); frm.setVisible(true); } static class Change implements ActionListener { public void actionPerformed(ActionEvent e) { Timer timer = new Timer(); timer.schedule(new mytask(jpb), 100, 100); jb.setEnabled(false); // 下面这种方法达不到预定效果,因为线程sleep()时用户界面也不会响应,只会在actionPerformde()执行结束后才会响应 /* * for (int i = 0; i <= 100; i++) { try { Thread.sleep(100); * * jpb.setValue(i); * * } catch (InterruptedException e1) { e1.printStackTrace(); } * * } */ // 采用新建一个一个线程来执行累加可以达到预定的效果 /* * new Thread(new Runnable() { public void run() { for (int i = 1; i * <=100; i++) { try { Thread.sleep(100); jpb.setValue(i); } catch * (InterruptedException ie) { } } } }).start(); */ } } } class mytask extends TimerTask { JProgressBar jpb = null; int i = 1; public mytask(JProgressBar jp) { this.jpb = jp; } public void run() { this.jpb.setValue(i++); } }
以上就是本篇文章的所有内容,更多详细java常见问题及解决方法敬请关注奇Q工具网了解详情。
推荐阅读: