1 package net.sf.launch4j.formimpl;
\r
3 import java.awt.AWTEvent;
\r
4 import java.awt.Component;
\r
5 import java.awt.Cursor;
\r
6 import java.awt.Toolkit;
\r
7 import java.awt.Window;
\r
8 import java.awt.event.AWTEventListener;
\r
9 import java.awt.event.KeyAdapter;
\r
10 import java.awt.event.KeyEvent;
\r
11 import java.awt.event.MouseAdapter;
\r
13 import javax.swing.JComponent;
\r
14 import javax.swing.SwingUtilities;
\r
17 * This is the glass pane class that intercepts screen interactions during
\r
18 * system busy states.
\r
20 * Based on JavaWorld article by Yexin Chen.
\r
22 public class GlassPane extends JComponent implements AWTEventListener {
\r
23 private final Window _window;
\r
25 public GlassPane(Window w) {
\r
27 addMouseListener(new MouseAdapter() {});
\r
28 addKeyListener(new KeyAdapter() {});
\r
29 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
\r
33 * Receives all key events in the AWT and processes the ones that originated
\r
34 * from the current window with the glass pane.
\r
37 * the AWTEvent that was fired
\r
39 public void eventDispatched(AWTEvent event) {
\r
40 Object source = event.getSource();
\r
41 if (event instanceof KeyEvent
\r
42 && source instanceof Component) {
\r
44 * If the event originated from the window w/glass pane,
\r
45 * consume the event.
\r
47 if ((SwingUtilities.windowForComponent((Component) source) == _window)) {
\r
48 ((KeyEvent) event).consume();
\r
54 * Sets the glass pane as visible or invisible. The mouse cursor will be set
\r
57 public void setVisible(boolean visible) {
\r
59 // Start receiving all events and consume them if necessary
\r
60 Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.KEY_EVENT_MASK);
\r
62 // Stop receiving all events
\r
63 Toolkit.getDefaultToolkit().removeAWTEventListener(this);
\r
65 super.setVisible(visible);
\r