1 import javax.swing.*;
2 import java.awt.*;
3 import java.awt.event.*;
4 import java.beans.*;
5
6 public class ProgressBarDemo extends JApplet {
7 private JProgressBar jpb = new JProgressBar();
8 private JTextArea jtaResult = new JTextArea();
9 private JTextField jtfPrimeCount = new JTextField(8);
10 private JButton jbtDisplayPrime = new JButton("Display Prime");
11
12 public ProgressBarDemo() {
13 jpb.setStringPainted(true);
14 jpb.setValue(0);
15 jpb.setMaximum(100);
16
17 jtaResult.setWrapStyleWord(true);
18 jtaResult.setLineWrap(true);
19
20 JPanel panel = new JPanel();
21 panel.add(new JLabel("Enter the prime number count"));
22 panel.add(jtfPrimeCount);
23 panel.add(jbtDisplayPrime);
24
25 add(jpb, BorderLayout.NORTH);
26 add(new JScrollPane(jtaResult), BorderLayout.CENTER);
27 add(panel, BorderLayout.SOUTH);
28
29 jbtDisplayPrime.addActionListener(new ActionListener() {
30 @Override
31 public void actionPerformed(ActionEvent e) {
32 ComputePrime task = new ComputePrime(
33 Integer.parseInt(jtfPrimeCount.getText()), jtaResult);
34
35 task.addPropertyChangeListener(new PropertyChangeListener() {
36 public void propertyChange(PropertyChangeEvent e) {
37 if ("progress".equals(e.getPropertyName())) {
38 jpb.setValue((Integer)e.getNewValue());
39 }
40 }
41 });
42
43 task.execute();
44 }
45 });
46 }
47
48
49 static class ComputePrime extends SwingWorker<Integer, Integer> {
50 private int count;
51 private JTextArea result;
52
53
54 public ComputePrime(int count, JTextArea result) {
55 this.count = count;
56 this.result = result;
57 }
58
59
60 protected Integer doInBackground() {
61 publishPrimeNumbers(count);
62
63 return 0;
64 }
65
66
67 protected void process(java.util.List<Integer> list) {
68 for (int i = 0; i < list.size(); i++)
69 result.append(list.get(i) + " ");
70 }
71
72
73 private void publishPrimeNumbers(int n) {
74 int count = 0;
75 int number = 2;
76
77
78 while (count <= n) {
79
80 if (isPrime(number)) {
81 count++;
82 setProgress(100 * count / n);
83 publish(number);
84 }
85
86
87 number++;
88 }
89 }
90
91
92 private static boolean isPrime(int number) {
93 for (int divisor = 2; divisor <= number / 2; divisor++) {
94 if (number % divisor == 0) {
95 return false;
96 }
97 }
98
99 return true;
100 }
101 }
102
103 public static void main(String[] args) {
104 ProgressBarDemo applet = new ProgressBarDemo();
105 JFrame frame = new JFrame();
106 frame.setTitle("ProgressBarDemo");
107 frame.getContentPane().add(applet, BorderLayout.CENTER);
108 applet.init();
109 applet.start();
110 frame.setSize(400, 200);
111 frame.setLocationRelativeTo(null);
112 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
113 frame.setVisible(true);
114 }
115 }