1 import javax.swing.*;
2 import java.awt.*;
3 import java.awt.event.*;
4
5 public class SwingWorkerDemo extends JApplet {
6 private JButton jbtComputeWithSwingWorker = new JButton("Compute");
7 private JTextField jtfLimit1 = new JTextField(8);
8 private JTextField jtfResult1 = new JTextField(6);
9 private JButton jbtCompute = new JButton("Compute");
10 private JTextField jtfLimit2 = new JTextField(8);
11 private JTextField jtfResult2 = new JTextField(6);
12
13 public SwingWorkerDemo() {
14 JPanel panel1 = new JPanel(new GridLayout(2, 1));
15 panel1.setBorder(BorderFactory.createTitledBorder(
16 "Using SwingWorker"));
17 JPanel panel11 = new JPanel();
18 panel11.add(new JLabel("The number of prime numbers <= "));
19 panel11.add(jtfLimit1);
20 panel11.add(new JLabel("is"));
21 panel11.add(jtfResult1);
22 JPanel panel12 = new JPanel();
23 panel12.add(jbtComputeWithSwingWorker);
24 panel1.add(panel11);
25 panel1.add(panel12);
26
27 JPanel panel2 = new JPanel(new GridLayout(2, 1));
28 panel2.setBorder(BorderFactory.createTitledBorder(
29 "Without Using SwingWorker"));
30 JPanel panel21 = new JPanel();
31 panel21.add(new JLabel("The number of prime numbers <= "));
32 panel21.add(jtfLimit2);
33 panel21.add(new JLabel("is"));
34 panel21.add(jtfResult2);
35 JPanel panel22 = new JPanel();
36 panel22.add(jbtCompute);
37 panel2.add(panel21);
38 panel2.add(panel22);
39
40 setLayout(new GridLayout(1, 2));
41 add(panel1);
42 add(panel2);
43
44 jbtComputeWithSwingWorker.addActionListener(new ActionListener() {
45 @Override
46 public void actionPerformed(ActionEvent e) {
47 new ComputePrime(Integer.parseInt(jtfLimit1.getText()),
48 jtfResult1).execute();
49 }
50 });
51
52 jbtCompute.addActionListener(new ActionListener() {
53 @Override
54 public void actionPerformed(ActionEvent e) {
55 int count = ComputePrime.getNumberOfPrimes(
56 Integer.parseInt(jtfLimit2.getText()));
57 jtfResult2.setText(count + "");
58 }
59 });
60 }
61
62
63 static class ComputePrime extends SwingWorker<Integer, Object> {
64 private int limit;
65 private JTextField result;
66
67
68 public ComputePrime(int limit, JTextField result) {
69 this.limit = limit;
70 this.result = result;
71 }
72
73
74 protected Integer doInBackground() {
75 return getNumberOfPrimes(limit);
76 }
77
78
79 protected void done() {
80 try {
81 result.setText(get().toString());
82 }
83 catch (Exception ex) {
84 result.setText(ex.getMessage());
85 }
86 }
87
88
89 public static int getNumberOfPrimes(int limit) {
90 int count = 0;
91 int number = 2;
92
93
94 while (number <= limit) {
95
96 if (isPrime(number)) {
97 count++;
98 }
99
100
101 number++;
102 }
103
104 return count;
105 }
106
107
108 private static boolean isPrime(int number) {
109 for (int divisor = 2; divisor <= number / 2; divisor++) {
110 if (number % divisor == 0) {
111 return false;
112 }
113 }
114
115 return true;
116 }
117 }
118
119 public static void main(String[] args) {
120 SwingWorkerDemo applet = new SwingWorkerDemo();
121 JFrame frame = new JFrame();
122 frame.setTitle("SwingWorkerDemo");
123 frame.getContentPane().add(applet, BorderLayout.CENTER);
124 applet.init();
125 applet.start();
126 frame.pack();
127 frame.setLocationRelativeTo(null);
128 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
129 frame.setVisible(true);
130 }
131 }