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 }