Handle long-running tasks in a Swing application : Swing Utilities « Swing JFC « Java






Handle long-running tasks in a Swing application

    

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Main {
  private static JButton good = new JButton("Good");
  private static JLabel resultLabel = new JLabel("Ready", JLabel.CENTER);
  public static void main(String[] args) {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel p = new JPanel();
    p.setOpaque(true);
    p.setLayout(new FlowLayout());
    p.add(good);

    f.add(p, BorderLayout.CENTER);
    f.add(resultLabel, BorderLayout.SOUTH);
    good.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ev) {
        resultLabel.setText("Working . . .");
        good.setEnabled(false);
        Thread worker = new Thread() {
          public void run() {
            try {
              Thread.sleep(5000);
            } catch (InterruptedException ex) {
            }
            SwingUtilities.invokeLater(new Runnable() {
              public void run() {
                resultLabel.setText("Ready");
                good.setEnabled(true);
              }
            });
          }
        };
        worker.start(); // So we don't hold up the dispatch thread.
      }
    });
    f.setSize(300, 100);
    f.setVisible(true);
  }
}

   
    
    
    
  








Related examples in the same category

1.Swing Utilities getWindowAncestor
2.Swing invoke and wait
3.Swing invoke later
4.Getting the JFrame of a Component
5.Convert a coordinate relative to a component's bounds to screen coordinates
6.Convert a coordinate on a screen to a coordinate relative to a component's bounds
7.Swing worker Example
8.Center that window on the given desktop.
9.Returns the usable area of the screenReturns the usable area of the screen
10.Converts a Swing key stroke descriptor to a familiar Emacs-like nameConverts a Swing key stroke descriptor to a familiar Emacs-like name
11.Get Owning Frame for Component
12.Get Screen Bounds For
13.Get Top Frame
14.Get Top Level Ancestor
15.Change the sizes of all the passed buttons to be the size of the largest one.
16.Using SwingUtilities.updateComponentTreeUI to update UI by platform settingsUsing SwingUtilities.updateComponentTreeUI to update UI by platform settings
17.Repaints the parent of the given component.
18.Gets the root pane of the given component.
19.Gets the root pane of the window.
20.Gets the layered pane of the window of the given component.
21.Gets the content pane of the given window.
22.Verifies if the given point is visible on the screen.
23.Determines if the component is visible in its window at the given screen location.