Guest User

Untitled

a guest
Jul 21st, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.33 KB | None | 0 0
  1. package Primos;
  2.  
  3. import java.util.List;
  4. import java.util.Random;
  5. import java.util.concurrent.ExecutionException;
  6.  
  7. import javax.swing.JButton;
  8. import javax.swing.JLabel;
  9. import javax.swing.JTextArea;
  10. import javax.swing.SwingWorker;
  11.  
  12. public class PrimeCalculator extends SwingWorker<Integer, Integer> {
  13.     private final Random generator = new Random();
  14.     private final JTextArea intermediateJTextArea;
  15.     private final JButton getPrimesJButton;
  16.     private final JButton cancelJButton;
  17.     private final JLabel statusJLabel;
  18.     private final boolean primes[];
  19.     private boolean stopped = false;
  20.  
  21.     public PrimeCalculator(int max, JTextArea intermediate, JLabel status, JButton getPrimes, JButton cancel) {
  22.         intermediateJTextArea = intermediate;
  23.         statusJLabel = status;
  24.         getPrimesJButton = getPrimes;
  25.         cancelJButton = cancel;
  26.         primes = new boolean[max];
  27.  
  28.         for (int i = 0; i < max; i++)
  29.             primes[i] = true;
  30.     }
  31.  
  32.     public Integer doInBackground() {
  33.         int count = 0;
  34.         for (int i = 2; i < primes.length; i++) {
  35.             if (stopped)
  36.                 return count;
  37.             else {
  38.                 setProgress(100 * (i + 1) / primes.length);
  39.  
  40.                 try {
  41.                     Thread.currentThread().sleep(generator.nextInt(5));
  42.                 } catch (InterruptedException ex) {
  43.                     statusJLabel.setText("Thread Interrompida");
  44.                     return count;
  45.                 }
  46.  
  47.                 if (primes[i]) {
  48.                     publish(i);
  49.                     ++count;
  50.  
  51.                     for (int j = i + i; j < primes.length; j += i)
  52.                         primes[j] = false;
  53.                 }
  54.             }
  55.  
  56.         }
  57.  
  58.         return count;
  59.     }
  60.  
  61.     protected void process(List<Integer> publishedVals) {
  62.         for (int i = 0; i < publishedVals.size(); i++)
  63.             intermediateJTextArea.append(publishedVals.get(i) + "\n");
  64.     }
  65.  
  66.     protected void done() {
  67.         getPrimesJButton.setEnabled(true);
  68.         cancelJButton.setEnabled(false);
  69.         int numPrimes;
  70.  
  71.         try {
  72.             numPrimes = get();
  73.         } catch (InterruptedException ex) {
  74.             statusJLabel.setText("Interrupted while waiting for results.");
  75.             return;
  76.         } catch (ExecutionException ex) {
  77.             statusJLabel.setText("Error performing computation.");
  78.             return;
  79.         }
  80.  
  81.         statusJLabel.setText("Encontrados " + numPrimes + " primos.");
  82.     }
  83.  
  84.     public void stopCalculation() {
  85.         stopped = true;
  86.     }
  87. }
  88. /////////////////////////////////////////////////////////////////////////////////
  89.  
  90. package Primos;
  91.  
  92. import java.awt.BorderLayout;
  93. import java.awt.GridLayout;
  94. import java.awt.event.ActionEvent;
  95. import java.awt.event.ActionListener;
  96. import java.beans.PropertyChangeEvent;
  97. import java.beans.PropertyChangeListener;
  98.  
  99. import javax.swing.JButton;
  100. import javax.swing.JFrame;
  101. import javax.swing.JLabel;
  102. import javax.swing.JPanel;
  103. import javax.swing.JProgressBar;
  104. import javax.swing.JScrollPane;
  105. import javax.swing.JTextArea;
  106. import javax.swing.JTextField;
  107. import javax.swing.ScrollPaneConstants;
  108.  
  109. public class FindPrimes extends JFrame {
  110.     private final JTextField highestPrimeJTextField = new JTextField();
  111.     private final JButton getPrimesJButton = new JButton("Executar");
  112.     private final JTextArea displayPrimesJTextArea = new JTextArea();
  113.     private final JButton cancelJButton = new JButton("Cancelar");
  114.     private final JProgressBar progressJProgressBar = new JProgressBar();
  115.     private final JLabel statusJLabel = new JLabel();
  116.     private PrimeCalculator calculator;
  117.  
  118.     public FindPrimes() {
  119.         super("Números Primos");
  120.         setLayout(new BorderLayout());
  121.  
  122.         JPanel northJPanel = new JPanel();
  123.         northJPanel.add(new JLabel("Primos anteriores a: "));
  124.         highestPrimeJTextField.setColumns(5);
  125.         northJPanel.add(highestPrimeJTextField);
  126.         getPrimesJButton.addActionListener(new ActionListener() {
  127.             public void actionPerformed(ActionEvent e) {
  128.                 progressJProgressBar.setValue(0);
  129.                 displayPrimesJTextArea.setText("");
  130.                 statusJLabel.setText("");
  131.  
  132.                 int number;
  133.                 try {
  134.  
  135.                     number = Integer.parseInt(highestPrimeJTextField.getText());
  136.                 } catch (NumberFormatException ex) {
  137.                     statusJLabel.setText("Use Inteiros!");
  138.                     return;
  139.                 }
  140.  
  141.                 calculator = new PrimeCalculator(number, displayPrimesJTextArea, statusJLabel, getPrimesJButton, cancelJButton);
  142.  
  143.                 calculator.addPropertyChangeListener(new PropertyChangeListener() {
  144.                     public void propertyChange(PropertyChangeEvent e) {
  145.                         if (e.getPropertyName().equals("Progresso")) {
  146.                             int newValue = (Integer) e.getNewValue();
  147.                             progressJProgressBar.setValue(newValue);
  148.                         }
  149.                     }
  150.                 });
  151.  
  152.                 getPrimesJButton.setEnabled(false);
  153.                 cancelJButton.setEnabled(true);
  154.  
  155.                 calculator.execute();
  156.             }
  157.         });
  158.         northJPanel.add(getPrimesJButton);
  159.  
  160.         displayPrimesJTextArea.setEditable(false);
  161.         add(new JScrollPane(displayPrimesJTextArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER));
  162.  
  163.         JPanel southJPanel = new JPanel(new GridLayout(1, 3, 10, 10));
  164.         cancelJButton.setEnabled(false);
  165.         cancelJButton.addActionListener(new ActionListener() {
  166.             public void actionPerformed(ActionEvent e) {
  167.                 calculator.stopCalculation();
  168.             }
  169.         });
  170.         southJPanel.add(cancelJButton);
  171.         progressJProgressBar.setStringPainted(true);
  172.         southJPanel.add(progressJProgressBar);
  173.         southJPanel.add(statusJLabel);
  174.  
  175.         add(northJPanel, BorderLayout.NORTH);
  176.         add(southJPanel, BorderLayout.SOUTH);
  177.         setSize(350, 300);
  178.         setVisible(true);
  179.     }
  180.  
  181.     public static void main(String[] args) {
  182.         FindPrimes application = new FindPrimes();
  183.         application.setDefaultCloseOperation(EXIT_ON_CLOSE);
  184.     }
  185. }
Add Comment
Please, Sign In to add comment