00001 package edu.stanford.hci.r3.util.components;
00002
00003 import java.awt.DisplayMode;
00004 import java.awt.GraphicsDevice;
00005 import java.awt.GraphicsEnvironment;
00006
00007 import javax.swing.JFrame;
00008
00020 public class FullScreenJFrame extends JFrame {
00021
00025 private GraphicsDevice screenDevice;
00026
00030 public FullScreenJFrame() {
00031 setUndecorated(true);
00032 final GraphicsEnvironment localGraphicsEnvironment = GraphicsEnvironment
00033 .getLocalGraphicsEnvironment();
00034 screenDevice = localGraphicsEnvironment.getDefaultScreenDevice();
00035 }
00036
00040 public FullScreenJFrame(int deviceIndex) {
00041 setUndecorated(true);
00042 final GraphicsEnvironment localGraphicsEnvironment = GraphicsEnvironment
00043 .getLocalGraphicsEnvironment();
00044 GraphicsDevice[] screenDevices = localGraphicsEnvironment.getScreenDevices();
00045 screenDevice = screenDevices[deviceIndex];
00046 }
00047
00051 private void chooseBestDisplayMode() {
00052 if (screenDevice.isDisplayChangeSupported()) {
00053 DisplayMode best = getBestDisplayMode();
00054 if (best != null) {
00055 screenDevice.setDisplayMode(best);
00056 }
00057 }
00058 }
00059
00063 private DisplayMode getBestDisplayMode() {
00064 final DisplayMode[] availableModes = screenDevice.getDisplayModes();
00065 int maxWidth = 0;
00066 int maxDepth = 0;
00067 DisplayMode bestSoFar = null;
00068 for (DisplayMode m : availableModes) {
00069 System.out.println(m.getWidth() + " x " + m.getHeight() + " " + m.getBitDepth());
00070 if (m.getWidth() >= maxWidth) {
00071 maxWidth = m.getWidth();
00072 if (m.getBitDepth() >= maxDepth) {
00073 maxDepth = m.getBitDepth();
00074 bestSoFar = m;
00075 }
00076 }
00077 }
00078 return bestSoFar;
00079 }
00080
00084 public void setVisible(boolean b) {
00085 if (b) {
00086 screenDevice.setFullScreenWindow(this);
00087 chooseBestDisplayMode();
00088 super.setVisible(true);
00089 } else {
00090 screenDevice.setFullScreenWindow(null);
00091 super.setVisible(false);
00092 }
00093 }
00094
00095 }