请完成下列Java程序;创建一个进度条,可以控制其开始和暂停。要求进度条与线程关联,由线程控制,点击Start按钮开始进度条的滚动,点击Stop按钮,暂停,继续点击Start按钮则继续进行。 注意:请勿改动main()主方法和其他已有语句内容,仅在下划线处填入适当的语句。 程序运行结果如下:
import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; public class ex22_2 extends JPanel{ ThreadProg thProgress; JProgressBar jpb;//声明一个进程条对象 static JFrame if; public ex22_2() { setLayout(new BorderLayout()); jpb=new JProgressBar(); add(jpb,"Center"); JPanel btnPanel = new JPanel(); JButton btnStart = new JButton("Start"); btnPanel.add(btnStart); btnStart.addActionListener(new ActionListener()public void actionPerformed(ActionEvent ae) { _______________;}}); JButton btnStop = new JButton("Stop"); btnPanel.add(btnStop); btnStop.addActionListener(new ActionListener()public void actionPerformed(ActionEvent ae) { ____________;}}); add(btnPanel, BorderLayout. SOUTH); } public void startProgress() { if(thProgress == null|| !thProgress.isAlive())thProgress = new ThreadProg(jpb);thProgress.start(); } } public void stopProgress() { thProgress.setStop(true); } public static void main(String args[]){ jf = new JFrame("ex22_2"); ex22_2 obj22_2 = new ex22_2(); jf.getContentPane().add("Center",obj22_2); jf.setSize(250,80); jf.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent we) { System.exit(O);}}); jf.setVisible(true); } } class ThreadProg extends Thread { private JProgressBar jpb; private boolean bStop = false; private boolean bAlive = false; public ThreadProg(JProgressBar jpb){ this.jpb = jpb; } public void setStop(boolean b){ bStop = b; } public void run () { int min = 0; int max = 60; jpb.setMinimum(min); jpb.setMaximum(max); jpb.setValue(min); for (int x=min;x<=max;x++) (if(bStop){break;}else{ jpb. setValue (x); try { Thread. sleep (150); } catch (InterruptedException e) { }} } bAlive = false; } }
参考答案:
解析:startProgress() stopProgress() 本题主要考查swing图形用户界面编程以及多线程编程相结合。解题关键是掌握进度条JProgressBar类的基本用法及其与多线程相结合的编程方法,会继承Thread类写自己的线程类,完成需要的功能,线程的开始与暂停被封装在ThreadProg类中。本题中,第1个空,根据点击Start按钮事件调用startProgress()方法启动线程;第2个空,根据点击Stop按钮事件调用stopProgress()方法暂停线程。