 
 | 001 | /* | 
| 002 |  * WindowEventDemo.java is a 1.4 example that requires | 
| 003 |  * no other files. | 
| 004 |  */ | 
| 005 | 
| 006 | import javax.swing.*; | 
| 007 | import java.awt.*; | 
| 008 | import java.awt.event.*; | 
| 009 | 
| 010 | public class WindowEventDemo extends JPanel | 
| 011 |                              implements WindowListener, | 
| 012 |                                         WindowFocusListener, | 
| 013 |                                         WindowStateListener { | 
| 014 |     final static String newline = "\n"; | 
| 015 |     final static String space = "    "; | 
| 016 |     static JFrame frame; | 
| 017 |     JTextArea display; | 
| 018 | 
| 019 |     public WindowEventDemo() { | 
| 020 |         super(new BorderLayout()); | 
| 021 |         display = new JTextArea(); | 
| 022 |         display.setEditable(false); | 
| 023 |         JScrollPane scrollPane = new JScrollPane(display); | 
| 024 |         scrollPane.setPreferredSize(new Dimension(500, 450)); | 
| 025 |         add(scrollPane, BorderLayout.CENTER); | 
| 026 | 
| 027 |         frame.addWindowListener(this); | 
| 028 |         frame.addWindowFocusListener(this); | 
| 029 |         frame.addWindowStateListener(this); | 
| 030 | 
| 031 |         checkWM(); | 
| 032 |     } | 
| 033 | 
| 034 |     //Some window managers don't support all window states. | 
| 035 |     //For example, dtwm doesn't support true maximization, | 
| 036 |     //but mimics it by resizing the window to be the size | 
| 037 |     //of the screen.  In this case the window does not fire | 
| 038 |     //the MAXIMIZED_ constants on the window's state listener. | 
| 039 |     //Microsoft Windows supports MAXIMIZED_BOTH, but not | 
| 040 |     //MAXIMIZED_VERT or MAXIMIZED_HORIZ. | 
| 041 |     public void checkWM() { | 
| 042 |         Toolkit tk = frame.getToolkit(); | 
| 043 |         if (!(tk.isFrameStateSupported(Frame.ICONIFIED))) { | 
| 044 |             displayMessage( | 
| 045 |                "Your window manager doesn't support ICONIFIED."); | 
| 046 |         } | 
| 047 |         if (!(tk.isFrameStateSupported(Frame.MAXIMIZED_VERT))) { | 
| 048 |             displayMessage( | 
| 049 |                "Your window manager doesn't support MAXIMIZED_VERT."); | 
| 050 |         } | 
| 051 |         if (!(tk.isFrameStateSupported(Frame.MAXIMIZED_HORIZ))) { | 
| 052 |             displayMessage( | 
| 053 |                "Your window manager doesn't support MAXIMIZED_HORIZ."); | 
| 054 |         } | 
| 055 |         if (!(tk.isFrameStateSupported(Frame.MAXIMIZED_BOTH))) { | 
| 056 |             displayMessage( | 
| 057 |                "Your window manager doesn't support MAXIMIZED_BOTH."); | 
| 058 |         } else { | 
| 059 |             displayMessage( | 
| 060 |                "Your window manager supports MAXIMIZED_BOTH."); | 
| 061 |         } | 
| 062 |     } | 
| 063 | 
| 064 |     public void windowClosing(WindowEvent e) { | 
| 065 |         displayMessage("WindowListener method called: windowClosing."); | 
| 066 | 
| 067 |         //A pause so user can see the message before | 
| 068 |         //the window actually closes. | 
| 069 |         ActionListener task = new ActionListener() { | 
| 070 |             boolean alreadyDisposed = false; | 
| 071 |             public void actionPerformed(ActionEvent e) { | 
| 072 |                 if (!alreadyDisposed) { | 
| 073 |                     alreadyDisposed = true; | 
| 074 |                     frame.dispose(); | 
| 075 |                 } else { //make sure the program exits | 
| 076 |                     System.exit(0); | 
| 077 |                 } | 
| 078 |             } | 
| 079 |         }; | 
| 080 |         Timer timer = new Timer(500, task); //fire every half second | 
| 081 |         timer.setInitialDelay(2000);        //first delay 2 seconds | 
| 082 |         timer.start(); | 
| 083 |     } | 
| 084 | 
| 085 |     public void windowClosed(WindowEvent e) { | 
| 086 |         //This will only be seen on standard output. | 
| 087 |         displayMessage("WindowListener method called: windowClosed."); | 
| 088 |     } | 
| 089 | 
| 090 |     public void windowOpened(WindowEvent e) { | 
| 091 |         displayMessage("WindowListener method called: windowOpened."); | 
| 092 |     } | 
| 093 | 
| 094 |     public void windowIconified(WindowEvent e) { | 
| 095 |         displayMessage("WindowListener method called: windowIconified."); | 
| 096 |     } | 
| 097 | 
| 098 |     public void windowDeiconified(WindowEvent e) { | 
| 099 |         displayMessage("WindowListener method called: windowDeiconified."); | 
| 100 |     } | 
| 101 | 
| 102 |     public void windowActivated(WindowEvent e) { | 
| 103 |         displayMessage("WindowListener method called: windowActivated."); | 
| 104 |     } | 
| 105 | 
| 106 |     public void windowDeactivated(WindowEvent e) { | 
| 107 |         displayMessage("WindowListener method called: windowDeactivated."); | 
| 108 |     } | 
| 109 | 
| 110 |     public void windowGainedFocus(WindowEvent e) { | 
| 111 |         displayMessage("WindowFocusListener method called: windowGainedFocus."); | 
| 112 |     } | 
| 113 | 
| 114 |     public void windowLostFocus(WindowEvent e) { | 
| 115 |         displayMessage("WindowFocusListener method called: windowLostFocus."); | 
| 116 |     } | 
| 117 | 
| 118 |     public void windowStateChanged(WindowEvent e) { | 
| 119 |         displayStateMessage( | 
| 120 |           "WindowStateListener method called: windowStateChanged.", e); | 
| 121 |     } | 
| 122 | 
| 123 |     void displayMessage(String msg) { | 
| 124 |         display.append(msg + newline); | 
| 125 |         System.out.println(msg); | 
| 126 |     } | 
| 127 | 
| 128 |     void displayStateMessage(String prefix, WindowEvent e) { | 
| 129 |         int state = e.getNewState(); | 
| 130 |         int oldState = e.getOldState(); | 
| 131 |         String msg = prefix | 
| 132 |                    + newline + space | 
| 133 |                    + "New state: " | 
| 134 |                    + convertStateToString(state) | 
| 135 |                    + newline + space | 
| 136 |                    + "Old state: " | 
| 137 |                    + convertStateToString(oldState); | 
| 138 |         display.append(msg + newline); | 
| 139 |         System.out.println(msg); | 
| 140 |     } | 
| 141 | 
| 142 |     String convertStateToString(int state) { | 
| 143 |         if (state == Frame.NORMAL) { | 
| 144 |             return "NORMAL"; | 
| 145 |         } | 
| 146 |         if ((state & Frame.ICONIFIED) != 0) { | 
| 147 |             return "ICONIFIED"; | 
| 148 |         } | 
| 149 |         //MAXIMIZED_BOTH is a concatenation of two bits, so | 
| 150 |         //we need to test for an exact match. | 
| 151 |         if ((state & Frame.MAXIMIZED_BOTH) == Frame.MAXIMIZED_BOTH) { | 
| 152 |             return "MAXIMIZED_BOTH"; | 
| 153 |         } | 
| 154 |         if ((state & Frame.MAXIMIZED_VERT) != 0) { | 
| 155 |             return "MAXIMIZED_VERT"; | 
| 156 |         } | 
| 157 |         if ((state & Frame.MAXIMIZED_HORIZ) != 0) { | 
| 158 |             return "MAXIMIZED_HORIZ"; | 
| 159 |         } | 
| 160 |         return "UNKNOWN"; | 
| 161 |     } | 
| 162 | 
| 163 |     /** | 
| 164 |      * Create the GUI and show it.  For thread safety, | 
| 165 |      * this method should be invoked from the | 
| 166 |      * event-dispatching thread. | 
| 167 |      */ | 
| 168 |     privatestaticvoidcreateAndShowGUI() { | 
| 169 |         //Make sure we have nice window decorations. | 
| 170 |         JFrame.setDefaultLookAndFeelDecorated(true); | 
| 171 | 
| 172 |         //Create and set up the window. | 
| 173 |         frame = newJFrame("WindowEventDemo"); | 
| 174 |         frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); | 
| 175 | 
| 176 |         //Create and set up the content pane. | 
| 177 |         JComponent newContentPane = newWindowEventDemo(); | 
| 178 |         newContentPane.setOpaque(true); //content panes must be opaque | 
| 179 |         frame.setContentPane(newContentPane); | 
| 180 | 
| 181 |         //Display the window. | 
| 182 |         frame.pack(); | 
| 183 |         frame.setVisible(true); | 
| 184 |     } | 
| 185 | 
| 186 |     publicstaticvoidmain(String[] args) { | 
| 187 |         //Schedule a job for the event-dispatching thread: | 
| 188 |         //creating and showing this application's GUI. | 
| 189 |         javax.swing.SwingUtilities.invokeLater(newRunnable() { | 
| 190 |             publicvoidrun() { | 
| 191 |                 createAndShowGUI(); | 
| 192 |             } | 
| 193 |         }); | 
| 194 |     } | 
| 195 | } | 

 
 
  
0 komentar: