Stopping the use of Tab/Alt-F4 in a full-screen program in Java/Swing
I need a way to stop people using other programs while m开发者_运维知识库y Java program is running. i.e stopping people switch tabs and pressing Alt-F4.
To make the program full screen use;
window.setExtendedState(Frame.MAXIMIZED_BOTH); //maximise window
window.setUndecorated(true); //remove decorations e.g. x in top right
And to make the window always on top use(To stop people using other running programs);
window.setAlwaysOnTop(true);
You're not going to be able to do this at the Java level - you'll need to put the operating system into a "Kiosk Mode" of some kind.
Unsolicited commentary - Do you need this because you (or your customer) hate your users, and want them to curse you forever? Are you planning to add features like "shut down the computer" to your program?
If your looking for full screen support, this is the code I use. Should be enough to get you going. You just need a global boolean variable to say if the application is full screen or not. You can tinker with it to get it to display a you like.
/**
* Method allows changing whether this window is displayed in fullscreen or
* windowed mode.
* @param fullscreen true = change to fullscreen,
* false = change to windowed
*/
public void setFullscreen( boolean fullscreen )
{
//get a reference to the device.
GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
DisplayMode dispMode = device.getDisplayMode();
//save the old display mode before changing it.
dispModeOld = device.getDisplayMode();
if( this.fullscreen != fullscreen )
{ //are we actually changing modes.
//change modes.
this.fullscreen = fullscreen;
// toggle fullscreen mode
if( !fullscreen )
{
//change to windowed mode.
//set the display mode back to the what it was when
//the program was launched.
device.setDisplayMode(dispModeOld);
//hide the frame so we can change it.
setVisible(false);
//remove the frame from being displayable.
dispose();
//put the borders back on the frame.
setUndecorated(false);
//needed to unset this window as the fullscreen window.
device.setFullScreenWindow(null);
//recenter window
setLocationRelativeTo(null);
setResizable(true);
//reset the display mode to what it was before
//we changed it.
setVisible(true);
}
else
{ //change to fullscreen.
//hide everything
setVisible(false);
//remove the frame from being displayable.
dispose();
//remove borders around the frame
setUndecorated(true);
//make the window fullscreen.
device.setFullScreenWindow(this);
//attempt to change the screen resolution.
device.setDisplayMode(dispMode);
setResizable(false);
setAlwaysOnTop(false);
//show the frame
setVisible(true);
}
//make sure that the screen is refreshed.
repaint();
}
}
精彩评论