【发布时间】:2013-08-03 15:33:22
【问题描述】:
以下代码的编写方式与我正在阅读的 Java 书籍完全相同
package main;
import java.awt.Color;
import java.awt.DisplayMode;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JFrame;
public class FullScreenTest extends JFrame {
public static void main(String[] args) {
DisplayMode displayMode;
if (args.length == 3) {
displayMode = new DisplayMode(Integer.parseInt(args[0]),
Integer.parseInt(args[1]), Integer.parseInt(args[2]),
DisplayMode.REFRESH_RATE_UNKNOWN);
} else {
displayMode = new DisplayMode(800, 600, 16,
DisplayMode.REFRESH_RATE_UNKNOWN);
}
FullScreenTest test = new FullScreenTest();
test.run(displayMode);
}
private static final long DEMO_TIME = 1000;
public void run(DisplayMode displayMode) {
setBackground(Color.blue);
setForeground(Color.white);
setFont(new Font("Dialog", Font.PLAIN, 24));
SimpleScreenManager screen = new SimpleScreenManager();
try {
screen.setFullScreen(displayMode, this);
try {
Thread.sleep(DEMO_TIME);
} catch (Exception e) {
}
} finally {
screen.restoreScreen();
}
}
public void paint(Graphics g) {
g.drawString("Hello World!", 20, 50);
}
}
当我运行它时,我会黑屏 5 秒钟,就这样。
但是当我更改以下行时:
displayMode = new DisplayMode(800, 600, 16, DisplayMode.REFRESH_RATE_UNKNOWN);
到这里:
displayMode = new DisplayMode(600, 800, 16, DisplayMode.REFRESH_RATE_UNKNOWN);
效果很好。
为什么会这样?我不太明白。
谢谢,
-史蒂夫
package main;
import java.awt.DisplayMode;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Window;
import javax.swing.JFrame;
public class SimpleScreenManager {
private GraphicsDevice device;
public SimpleScreenManager() {
GraphicsEnvironment environment = GraphicsEnvironment
.getLocalGraphicsEnvironment();
device = environment.getDefaultScreenDevice();
}
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 (Exception e) {
}
}
}
public Window getFullScreenWindow() {
return device.getFullScreenWindow();
}
public void restoreScreen() {
Window window = device.getFullScreenWindow();
if (window != null) {
window.dispose();
}
device.setFullScreenWindow(null);
}
}
【问题讨论】:
-
600x800是大多数显示适配器的非标准显示尺寸。 -
我不明白,600x800 是怎么来的?我目前的显示器分辨率是 1920x1080,那不行……怎么会是 1080x1920?
-
哦等等,我的意思是
600x800,垂直纵横比。 -
那么为什么 600x800 可以正常工作?
-
SimpleScreenManager似乎是一个自定义类。答案可能在那个班级的代码中吗?
标签: java swing fullscreen