Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Primos;
- import java.util.List;
- import java.util.Random;
- import java.util.concurrent.ExecutionException;
- import javax.swing.JButton;
- import javax.swing.JLabel;
- import javax.swing.JTextArea;
- import javax.swing.SwingWorker;
- public class PrimeCalculator extends SwingWorker<Integer, Integer> {
- private final Random generator = new Random();
- private final JTextArea intermediateJTextArea;
- private final JButton getPrimesJButton;
- private final JButton cancelJButton;
- private final JLabel statusJLabel;
- private final boolean primes[];
- private boolean stopped = false;
- public PrimeCalculator(int max, JTextArea intermediate, JLabel status, JButton getPrimes, JButton cancel) {
- intermediateJTextArea = intermediate;
- statusJLabel = status;
- getPrimesJButton = getPrimes;
- cancelJButton = cancel;
- primes = new boolean[max];
- for (int i = 0; i < max; i++)
- primes[i] = true;
- }
- public Integer doInBackground() {
- int count = 0;
- for (int i = 2; i < primes.length; i++) {
- if (stopped)
- return count;
- else {
- setProgress(100 * (i + 1) / primes.length);
- try {
- Thread.currentThread().sleep(generator.nextInt(5));
- } catch (InterruptedException ex) {
- statusJLabel.setText("Thread Interrompida");
- return count;
- }
- if (primes[i]) {
- publish(i);
- ++count;
- for (int j = i + i; j < primes.length; j += i)
- primes[j] = false;
- }
- }
- }
- return count;
- }
- protected void process(List<Integer> publishedVals) {
- for (int i = 0; i < publishedVals.size(); i++)
- intermediateJTextArea.append(publishedVals.get(i) + "\n");
- }
- protected void done() {
- getPrimesJButton.setEnabled(true);
- cancelJButton.setEnabled(false);
- int numPrimes;
- try {
- numPrimes = get();
- } catch (InterruptedException ex) {
- statusJLabel.setText("Interrupted while waiting for results.");
- return;
- } catch (ExecutionException ex) {
- statusJLabel.setText("Error performing computation.");
- return;
- }
- statusJLabel.setText("Encontrados " + numPrimes + " primos.");
- }
- public void stopCalculation() {
- stopped = true;
- }
- }
- /////////////////////////////////////////////////////////////////////////////////
- package Primos;
- import java.awt.BorderLayout;
- import java.awt.GridLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.beans.PropertyChangeEvent;
- import java.beans.PropertyChangeListener;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- import javax.swing.JProgressBar;
- import javax.swing.JScrollPane;
- import javax.swing.JTextArea;
- import javax.swing.JTextField;
- import javax.swing.ScrollPaneConstants;
- public class FindPrimes extends JFrame {
- private final JTextField highestPrimeJTextField = new JTextField();
- private final JButton getPrimesJButton = new JButton("Executar");
- private final JTextArea displayPrimesJTextArea = new JTextArea();
- private final JButton cancelJButton = new JButton("Cancelar");
- private final JProgressBar progressJProgressBar = new JProgressBar();
- private final JLabel statusJLabel = new JLabel();
- private PrimeCalculator calculator;
- public FindPrimes() {
- super("Números Primos");
- setLayout(new BorderLayout());
- JPanel northJPanel = new JPanel();
- northJPanel.add(new JLabel("Primos anteriores a: "));
- highestPrimeJTextField.setColumns(5);
- northJPanel.add(highestPrimeJTextField);
- getPrimesJButton.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- progressJProgressBar.setValue(0);
- displayPrimesJTextArea.setText("");
- statusJLabel.setText("");
- int number;
- try {
- number = Integer.parseInt(highestPrimeJTextField.getText());
- } catch (NumberFormatException ex) {
- statusJLabel.setText("Use Inteiros!");
- return;
- }
- calculator = new PrimeCalculator(number, displayPrimesJTextArea, statusJLabel, getPrimesJButton, cancelJButton);
- calculator.addPropertyChangeListener(new PropertyChangeListener() {
- public void propertyChange(PropertyChangeEvent e) {
- if (e.getPropertyName().equals("Progresso")) {
- int newValue = (Integer) e.getNewValue();
- progressJProgressBar.setValue(newValue);
- }
- }
- });
- getPrimesJButton.setEnabled(false);
- cancelJButton.setEnabled(true);
- calculator.execute();
- }
- });
- northJPanel.add(getPrimesJButton);
- displayPrimesJTextArea.setEditable(false);
- add(new JScrollPane(displayPrimesJTextArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER));
- JPanel southJPanel = new JPanel(new GridLayout(1, 3, 10, 10));
- cancelJButton.setEnabled(false);
- cancelJButton.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- calculator.stopCalculation();
- }
- });
- southJPanel.add(cancelJButton);
- progressJProgressBar.setStringPainted(true);
- southJPanel.add(progressJProgressBar);
- southJPanel.add(statusJLabel);
- add(northJPanel, BorderLayout.NORTH);
- add(southJPanel, BorderLayout.SOUTH);
- setSize(350, 300);
- setVisible(true);
- }
- public static void main(String[] args) {
- FindPrimes application = new FindPrimes();
- application.setDefaultCloseOperation(EXIT_ON_CLOSE);
- }
- }
Add Comment
Please, Sign In to add comment