InvokeLaterExample.java Source code

Java tutorial

Introduction

Here is the source code for InvokeLaterExample.java

Source

/*
Code from Desktop Java Live Source
    
URL: http://www.sourcebeat.com/downloads/
    
*/

import javax.swing.*;
import java.awt.event.ActionEvent;

public class InvokeLaterExample extends JPanel {
    private JLabel statusArea;
    private DefaultListModel listModel;

    public InvokeLaterExample() {
        JButton button = new JButton(new LongRunningModelFillAction());
        add(button);

        JList list = new JList();
        this.listModel = new DefaultListModel();
        this.listModel.addElement("An Empty List Model");
        list.setModel(listModel);
        add(new JScrollPane(list));

        add(new JLabel("Status:"));
        this.statusArea = new JLabel();
        add(this.statusArea);
    }

    private class LongRunningModelFillAction extends AbstractAction {
        public LongRunningModelFillAction() {
            super("Fill Model");
        }

        public void actionPerformed(ActionEvent e) {
            InvokeLaterExample.this.listModel.removeAllElements();
            InvokeLaterExample.this.listModel.addElement("Calculating...");
            PopulationRunnable populationRunnable = new PopulationRunnable();
            Thread populationThread = new Thread(populationRunnable);
            populationThread.start();
        }
    }

    private class PopulationRunnable implements Runnable {
        public void run() {
            final Object[] values = new Object[100];
            for (int i = 1; i <= 100; i++) {
                values[i - 1] = "Value" + i;

                if ((i % 10) == 0) {
                    final int progress = i;
                    SwingUtilities.invokeLater(new Runnable() {
                        public void run() {
                            InvokeLaterExample.this.statusArea.setText("Calculated " + progress);
                        }
                    });
                }
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                }
            }

            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    InvokeLaterExample.this.statusArea.setText("");
                    InvokeLaterExample.this.listModel.removeAllElements();
                    for (int i = 0; i < values.length; i++) {
                        InvokeLaterExample.this.listModel.addElement(values[i]);
                    }
                }
            });
        }
    }

    public static void main(String[] a) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(1);
        f.add(new InvokeLaterExample());
        f.pack();
        f.setVisible(true);
    }

}