Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.BorderLayout;
- import java.awt.event.KeyEvent;
- import java.beans.PropertyChangeEvent;
- import java.beans.PropertyChangeListener;
- import java.beans.PropertyChangeSupport;
- import java.util.List;
- import java.util.concurrent.ExecutionException;
- import java.util.concurrent.TimeUnit;
- import javax.swing.*;
- @SuppressWarnings("serial")
- public class Example2 extends JPanel {
- private JTextArea textArea = new JTextArea(20, 50);
- private Task2 task2 = null;
- private JButton doItBtn = new JButton("Do it!");
- public Example2() {
- textArea.setFocusable(false);
- JScrollPane scrollPane = new JScrollPane(textArea);
- scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
- doItBtn.setMnemonic(KeyEvent.VK_D);
- doItBtn.addActionListener(e -> startTask());
- JPanel btnPanel = new JPanel();
- btnPanel.add(doItBtn);
- setLayout(new BorderLayout());
- add(scrollPane);
- add(btnPanel, BorderLayout.PAGE_END);
- }
- private void startTask() {
- doItBtn.setEnabled(false); // disable button
- task2 = new Task2();
- final MyWorker worker = new MyWorker(task2);
- worker.addPropertyChangeListener(pcsEvent -> {
- if (pcsEvent.getNewValue() == SwingWorker.StateValue.DONE) {
- doItBtn.setEnabled(true);
- try {
- @SuppressWarnings("unused")
- int result = worker.get();
- } catch (InterruptedException | ExecutionException e) {
- e.printStackTrace();
- // TODO: show a JOptionPane error message if problem here
- }
- }
- });
- worker.execute();
- }
- class MyWorker extends SwingWorker<Integer, String> {
- private Task2 task2;
- public MyWorker(Task2 task2) {
- this.task2 = task2;
- }
- @Override
- protected Integer doInBackground() throws Exception {
- task2.addPropertyChangeListener(pcsEvent -> stateEvent(pcsEvent));
- int result = task2.doTask();
- return result;
- }
- private void stateEvent(PropertyChangeEvent event) {
- if (Task2.STATE.equals(event.getPropertyName())) {
- publish((String) event.getNewValue());
- }
- }
- @Override
- protected void process(List<String> chunks) {
- for (String chunk : chunks) {
- textArea.append(chunk + "\n");
- }
- }
- }
- public static void main(String[] args) {
- SwingUtilities.invokeLater(() -> {
- Example2 example = new Example2();
- JFrame frame = new JFrame("GUI");
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.add(example);
- frame.pack();
- frame.setLocationRelativeTo(null);
- frame.setVisible(true);
- });
- }
- }
- class Task2 {
- public static final String STATE = "state";
- private PropertyChangeSupport pcs = new PropertyChangeSupport(this);
- private String state;
- public String getState() {
- return state;
- }
- public void setState(String state) {
- String oldValue = this.state;
- String newValue = state;
- this.state = state;
- pcs.firePropertyChange(STATE, oldValue, newValue);
- }
- public void addPropertyChangeListener(PropertyChangeListener listener) {
- pcs.addPropertyChangeListener(listener);
- }
- public void removePropertyChangeListener(PropertyChangeListener listener) {
- pcs.removePropertyChangeListener(listener);
- }
- public int doTask() throws InterruptedException {
- //this method carrys out a background task an updates progress string throughout
- setState("Starting");
- System.out.println(getState());
- TimeUnit.SECONDS.sleep(2L);
- setState("hitting the flux capacitor");
- System.out.println(getState());
- TimeUnit.SECONDS.sleep(2L);
- setState("servicing Mr. Fusion");
- System.out.println(getState());
- TimeUnit.SECONDS.sleep(2L);
- setState("tuning Time circuits");
- System.out.println(getState());
- TimeUnit.SECONDS.sleep(2L);
- setState("cleaning Plutonium chamber");
- System.out.println(getState());
- TimeUnit.SECONDS.sleep(2L);
- setState("configuring Roentgen meter");
- System.out.println(getState());
- TimeUnit.SECONDS.sleep(2L);
- setState("finished");
- System.out.println(getState());
- return 0;
- }
- }
Add Comment
Please, Sign In to add comment