在JAVA中,使用setDisplayMode更改分辨率以进行全屏应用

我是JAVA语言的初学者,正在尝试学习如何创建全屏应用程序。

我正在尝试创建一个简单的应用程序,在运行时,在屏幕中央显示带有蓝色背景和简单文本行的全屏(从位置400×300开始)。 应用程序的分辨率设置为800×600。

我在运行OSX Lion的MacbookAir上运行代码,屏幕分辨率为1440×900。 问题是,尽管获得了我预期的蓝色背景,但文本仅显示在屏幕的左上角。 当我增加它的位置时,文本的位置将继续向下移动,直到它消失时超过1440×900。 我猜测屏幕分辨率仍设置为1440×900,与800×600相反。

这是我的主要课程:

import java.awt.*; import javax.swing.JFrame; public class bucky extends JFrame { public static void main(String[] args){ DisplayMode dm = new DisplayMode(800, 600, 16, DisplayMode.REFRESH_RATE_UNKNOWN); bucky b = new bucky(); b.run(dm); } public void run(DisplayMode dm){ setBackground(Color.BLUE); // Setting background color setForeground(Color.WHITE); setFont(new Font("Arial", Font.PLAIN, 24)); //The Screen variable is going to be a screen object Screen s = new Screen(); try{ s.setFullScreen(dm, this); //this refers to whatever object we are working on, ie 's' try{ //Once it is set to full screen, and wait for 5 second Thread.sleep(5000); }catch(Exception ex){}; } finally{ s.restoreScreen(); } } public void paint(Graphics g){ g.drawString("Test", 400, 300); } } 

这里是Screen类的构造函数和Screen类的方法,它将应用程序设置为全屏

 private GraphicsDevice vc; // Gives an interface to graphics card/video card. public Screen(){ //env is environment variable, containing all graphics manipulation objects GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); //When we get environment and getDegaultScreen Device, we get access to the entire monitor, not just a window vc = env.getDefaultScreenDevice(); } public void setFullScreen(DisplayMode dm, JFrame window){ window.setUndecorated(true); window.setResizable(false); vc.setFullScreenWindow(window); if(dm != null && vc.isDisplayChangeSupported()) { try{ vc.setDisplayMode(dm); }catch(Exception ex){} } } 

如果有人能指出我为什么没有正确设置决议,那将非常感激。

来自setDisplayMode的文档

显示模式必须是getDisplayModes()返回的显示模式之一,但有一个例外:通过DisplayMode.REFRESH_RATE_UNKNOWN刷新率传递显示模式将导致从具有匹配宽度,高度和匹配的可用显示模式列表中选择显示模式。位深度。

因此,您需要确保将显示模式设置为其中之一。

我认为答案是在GraphicsDevice.setDisplayMode(…)的 javadoc中。 您应首先检查if (gd.isFullScreenSupported())然后调用setFullScreenWindow(frame)或使用frame.setSize(...)方法模拟全屏模式。