001 package com.croftsoft.core.gui; 002 003 import java.awt.*; 004 import java.awt.event.*; 005 import java.security.AccessControlException; 006 import javax.swing.*; 007 008 import com.croftsoft.core.lang.NullArgumentException; 009 010 /********************************************************************* 011 * Toggles full-screen mode using ALT-ENTER. 012 * 013 * @version 014 * $Date: 2006/01/13 18:47:08 $ 015 * @since 016 * 2003-02-19 017 * @author 018 * <a href="https://www.croftsoft.com/">David Wallace Croft</a> 019 *********************************************************************/ 020 021 public final class FullScreenToggler 022 extends AbstractAction 023 ////////////////////////////////////////////////////////////////////// 024 ////////////////////////////////////////////////////////////////////// 025 { 026 027 private static final long serialVersionUID = 0L; 028 029 // 030 031 public static final String ACTION_KEY_TOGGLE_FULLSCREEN 032 = "com.croftsoft.core.gui.FullScreenToggler"; 033 034 // 035 036 private final Window window; 037 038 ////////////////////////////////////////////////////////////////////// 039 // static methods 040 ////////////////////////////////////////////////////////////////////// 041 042 public static void main ( String [ ] args ) 043 ////////////////////////////////////////////////////////////////////// 044 { 045 JFrame jFrame = new JFrame ( "Press ALT-ENTER to toggle" ); 046 047 jFrame.setDefaultCloseOperation ( 048 WindowConstants.DO_NOTHING_ON_CLOSE ); 049 050 jFrame.addWindowListener ( new ShutdownWindowAdapter ( ) ); 051 052 WindowLib.centerOnScreen ( jFrame, 0.8 ); 053 054 toggle ( jFrame, true ); 055 056 monitor ( jFrame ); 057 058 jFrame.setVisible ( true ); 059 } 060 061 public static boolean monitor ( JComponent component ) 062 ////////////////////////////////////////////////////////////////////// 063 { 064 NullArgumentException.check ( component ); 065 066 Window window = WindowLib.getParentWindow ( component ); 067 068 if ( window == null ) 069 { 070 return false; 071 } 072 073 KeyStroke keyStroke = KeyStroke.getKeyStroke ( 074 KeyEvent.VK_ENTER, InputEvent.ALT_MASK, false ); 075 076 InputMap inputMap = component.getInputMap ( 077 JComponent.WHEN_IN_FOCUSED_WINDOW ); 078 079 inputMap.put ( keyStroke, ACTION_KEY_TOGGLE_FULLSCREEN ); 080 081 inputMap = component.getInputMap ( JComponent.WHEN_FOCUSED ); 082 083 inputMap.put ( keyStroke, ACTION_KEY_TOGGLE_FULLSCREEN ); 084 085 inputMap = component.getInputMap ( 086 JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT ); 087 088 inputMap.put ( keyStroke, ACTION_KEY_TOGGLE_FULLSCREEN ); 089 090 component.getActionMap ( ).put ( 091 ACTION_KEY_TOGGLE_FULLSCREEN, 092 new FullScreenToggler ( window ) ); 093 094 return true; 095 } 096 097 public static void monitor ( JFrame jFrame ) 098 ////////////////////////////////////////////////////////////////////// 099 { 100 NullArgumentException.check ( jFrame ); 101 102 monitor ( jFrame.getRootPane ( ) ); 103 } 104 105 public static void toggle ( 106 Window window, 107 boolean fullScreen ) 108 ////////////////////////////////////////////////////////////////////// 109 { 110 NullArgumentException.check ( window ); 111 112 GraphicsConfiguration graphicsConfiguration 113 = window.getGraphicsConfiguration ( ); 114 115 GraphicsDevice graphicsDevice 116 = graphicsConfiguration.getDevice ( ); 117 118 if ( fullScreen ) 119 { 120 try 121 { 122 graphicsDevice.setFullScreenWindow ( window ); 123 124 window.validate ( ); 125 126 window.repaint ( ); 127 } 128 catch ( AccessControlException ex ) 129 { 130 } 131 } 132 else 133 { 134 try 135 { 136 graphicsDevice.setFullScreenWindow ( null ); 137 138 window.validate ( ); 139 140 window.repaint ( ); 141 } 142 catch ( AccessControlException ex ) 143 { 144 } 145 } 146 } 147 148 public static void toggle ( Window window ) 149 ////////////////////////////////////////////////////////////////////// 150 { 151 NullArgumentException.check ( window ); 152 153 GraphicsConfiguration graphicsConfiguration 154 = window.getGraphicsConfiguration ( ); 155 156 GraphicsDevice graphicsDevice 157 = graphicsConfiguration.getDevice ( ); 158 159 toggle ( window, graphicsDevice.getFullScreenWindow ( ) != window ); 160 } 161 162 ////////////////////////////////////////////////////////////////////// 163 // constructor methods 164 ////////////////////////////////////////////////////////////////////// 165 166 public FullScreenToggler ( Window window ) 167 ////////////////////////////////////////////////////////////////////// 168 { 169 NullArgumentException.check ( this.window = window ); 170 } 171 172 ////////////////////////////////////////////////////////////////////// 173 ////////////////////////////////////////////////////////////////////// 174 175 public void toggle ( ) 176 ////////////////////////////////////////////////////////////////////// 177 { 178 toggle ( window ); 179 } 180 181 public void toggle ( boolean fullScreen ) 182 ////////////////////////////////////////////////////////////////////// 183 { 184 toggle ( window, fullScreen ); 185 } 186 187 public void actionPerformed ( ActionEvent actionEvent ) 188 ////////////////////////////////////////////////////////////////////// 189 { 190 toggle ( window ); 191 } 192 193 ////////////////////////////////////////////////////////////////////// 194 ////////////////////////////////////////////////////////////////////// 195 }