views:

677

answers:

2

I'm working on a java swing application that will be used in a psychology experiment and the researchers have requested that I make the program "black out the screen" in order that there should be no outside stimuli for the user. They want the swing app to be truly full-screen and without any type of title bar or minimize/maximize/close buttons on the top.

The software will be running in a Windows XP environment using JavaSE 6.

How can I do this and please provide a code snippet if applicable.

Thanks!

+6  A: 

Use the setUndecorated(true) property. Note that this has to be done before making the frame visible.

JFrame frame = new JFrame();
Toolkit tk = Toolkit.getDefaultToolkit();
frame.setBounds(new Rectangle(new Point(0, 0), tk.getScreenSize()));
frame.setUndecorated(true);
frame.setVisible(true);
erickson
+11  A: 

Use the Full Screen Java APIs?

http://java.sun.com/docs/books/tutorial/extra/fullscreen/exclusivemode.html

http://www.artificis.hu/2006/03/16/java-awtswing-fullscreen

JFrame fr = new JFrame();
fr.setResizable(false);
if (!fr.isDisplayable()) {
    // Can only do this when the frame is not visible
    fr.setUndecorated(true);
}
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
try {
  if (gd.isFullScreenSupported()) {
    gd.setFullScreenWindow(fr);
  } else {
    // Can't run fullscreen, need to bodge around it (setSize to screen size, etc)
  }
  fr.setVisible(true);
  // Your business logic here
} finally {
  gd.setFullScreenWindow(null);
}
JeeBee
Can you explain (concisely) how these APIs are used instead of just posting links? I'll obviously read the links but still...
Yoely
Full-screen mode uses a different paradigm from normal Swing applications. It's intended for things like games or screen savers. As the link says, "Most full-screen exclusive applications are better suited to use undecorated windows." It's an option, but will require you to write more code yourself.
erickson
That's a mash up of both links, untested. Helps?
JeeBee
erickson - the user requirement: make the program "black out the screen" in order that there should be no outside stimuli for the user
JeeBee
Unfortunately I don't know this particular API well enough to give you a code sample, but if I were you I'd definitely invest the effort to learn it. It sounds like exactly the right solution for your problem.
David Zaslavsky
JeeBee, that's a simple requirement easily met by undecorating the frame.
erickson
erickson - How much extra code are we talking about here using this API? Are you saying that I wouldn't be able to use the standard Swing containers and dialog boxes because those are absolutely imperative to the application?
Yoely
@Yoely, you can use normal Swing containers. I'm not sure about dialogs and other top-level frames. If you aren't writing low-level painting for some of your own components, then you aren't taking advantage of full-screen mode. Try it and see what breaks, or just use the simple, reliable approach.
erickson
You can use JInternalFrames. http://java.sun.com/docs/books/tutorial/uiswing/components/internalframe.html
Tom Hawtin - tackline