2011-11-21 55 views
0

我一直在关注由David Brackeen撰写的“开发Java游戏”一书,并在第2章讲授如何使用全屏模式。我遇到的问题是,当我去运行他的源代码时,我得到的只是一个白色屏幕。我花了几个小时,我相信它与Windows 7有关。Java中的FullScreenMode

感谢您的时间!

import java.awt.*; 

import javax.swing.JFrame; 

/** 
The SimpleScreenManager class manages initializing and 
displaying full screen graphics modes. 
*/ 
public class SimpleScreenManager { 

private GraphicsDevice device; 

/** 
    Creates a new SimpleScreenManager object. 
*/ 
public SimpleScreenManager() { 
    GraphicsEnvironment environment = 
     GraphicsEnvironment.getLocalGraphicsEnvironment(); 
    device = environment.getDefaultScreenDevice(); 

} 


/** 
    Enters full screen mode and changes the display mode. 
*/ 
public void setFullScreen(DisplayMode displayMode, 
    JFrame window) 
{ 
    window.setUndecorated(true); 
    window.setResizable(false); 

    device.setFullScreenWindow(window); 

    if (displayMode != null && 
     device.isDisplayChangeSupported()) 
    { 
     try { 
      device.setDisplayMode(displayMode); 
     } 
     catch (IllegalArgumentException ex) { 
      // ignore - illegal mode for this device 
     } 
    } 
} 


/** 
    Returns the window currently used in full screen mode. 
*/ 
public Window getFullScreenWindow() { 
    return device.getFullScreenWindow(); 
} 


/** 
    Restores the screen's display mode. 
*/ 
public void restoreScreen() { 
    Window window = device.getFullScreenWindow(); 
    if (window != null) { 
     window.dispose(); 
    } 
    device.setFullScreenWindow(null); 
} 

public static void main(String args[]) 
{ 
    SimpleScreenManager t = new SimpleScreenManager(); 
    try { 

     t.setFullScreen(new DisplayMode(1920, 1080, 64, 0), new JFrame()); 
     Thread.sleep(2000); 
    } 
    catch (InterruptedException ex) { } 
    finally { 
     t.restoreScreen(); 
    } 
} 

}

+0

除非你的生活依赖于这一点,你可能希望避免对谁欠你什么人喊“救命ASAP'。 – MByD

+0

请尝试谷歌。你可能会得到其他工作解决方案 –

+0

这段代码已经过时了,请不要在EventDispashThread中使用Thread.sleep(int),有趣的是 – mKorbel

回答

0

切换!切换...

private void toggleDecoration(boolean decorated) { 
    dispose(); 
    if (decorated) { 
     //save last bounds and its extended state 
     lastState = getExtendedState(); 
     lastBounds = getBounds(); 
     try{ 
      setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH); 
     } 
     catch(Exception ev){ 
      setBounds(getGraphicsConfiguration().getDevice().getDefaultConfiguration().getBounds()); 
      ev.printStackTrace(); 
     } 
    } 
    else { 
     //restore last bounds and its extended state 
     setBounds(lastBounds); 
     setExtendedState(lastState); 
    } 
    setUndecorated(decorated); 
    setVisible(true); 
} 
+0

嗯。现在我有一个noob问题。我在哪里以及如何使用它?谢谢。 – user1058735

+0

你必须进行编辑才能使它在你的Swing应用程序中工作......基本思想是'dispose()'然后'setUndecorated(currentdecoratedState)'然后'setVisible(true)'...这将使一个窗口切换全屏,屏幕还是不屏幕...代码中的其余部分是保存/加载窗口的最后一个扩展状态 – ecle