OSDN Git Service

git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/filelock/trunk@17 c6214a2a-ec3a...
[filelock/repo.git] / filelock / src / main / lib / launch4j-2.1.5-win32 / src / net / sf / launch4j / formimpl / GlassPane.java
1 package net.sf.launch4j.formimpl;\r
2 \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
12 \r
13 import javax.swing.JComponent;\r
14 import javax.swing.SwingUtilities;\r
15 \r
16 /**\r
17  * This is the glass pane class that intercepts screen interactions during\r
18  * system busy states.\r
19  * \r
20  * Based on JavaWorld article by Yexin Chen.\r
21  */\r
22 public class GlassPane extends JComponent implements AWTEventListener {\r
23         private final Window _window;\r
24 \r
25         public GlassPane(Window w) {\r
26                 _window = w;\r
27                 addMouseListener(new MouseAdapter() {});\r
28                 addKeyListener(new KeyAdapter() {});\r
29                 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));\r
30         }\r
31 \r
32         /**\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
35          * \r
36          * @param event\r
37          *            the AWTEvent that was fired\r
38          */\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
43                         /*\r
44                          * If the event originated from the window w/glass pane,\r
45                          * consume the event.\r
46                          */\r
47                         if ((SwingUtilities.windowForComponent((Component) source) == _window)) {\r
48                                 ((KeyEvent) event).consume();\r
49                         }\r
50                 }\r
51         }\r
52 \r
53         /**\r
54          * Sets the glass pane as visible or invisible. The mouse cursor will be set\r
55          * accordingly.\r
56          */\r
57         public void setVisible(boolean visible) {\r
58                 if (visible) {\r
59                         // Start receiving all events and consume them if necessary\r
60                         Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.KEY_EVENT_MASK);\r
61                 } else {\r
62                         // Stop receiving all events\r
63                         Toolkit.getDefaultToolkit().removeAWTEventListener(this);\r
64                 }\r
65                 super.setVisible(visible);\r
66         }\r
67 }\r