0

我有一个 1280 x 768 的 JFrame 对象(将来我可能会将其更改为 1024 x 768)..

我通过调用这行代码使窗口全屏:

GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(window);

(虽然“窗口”是我的 JFrame 对象)

我可以看到屏幕似乎是全屏的,这对我来说非常有用,但是如果我要像这样画一个字符串:

g.drawString("Test!!!",100,100);

我仍然可以看到窗口没有缩放到 JFrame 的分辨率..(因为字符串是在我的屏幕的 100x100 点上绘制的,即 1920x1080)

我也尝试过使用新的显示模式:

DisplayMode display = new DisplayMode(1280, 768, 16, DisplayMode.REFRESH_RATE_UNKNOWN);
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setDisplayMode(display);

但我不断收到 UnsupportedOperationException:

线程“Thread-2”中的异常 java.lang.UnsupportedOperationException:无法更改显示模式

那是什么?我的显示器不支持更改显示模式吗?或者这只是一种错误的做法?

4

1 回答 1

0

我的建议是,不要使用 Method Chan。如果您不使用它,调试代码会容易得多。

在Oracle的官方文档中,您会找到正确的方法。解决您的问题的关键部分是您必须在设置显示模式之前设置窗口全屏模式。这是解锁显示模式以进行更改并为您的程序提供专有权的方法。只需在设置显示模式之前调用 setFullScreenWindow() 即可。

Frame frame;
 DisplayMode newDisplayMode;
 GraphicsDevice gd;
 // create a Frame, select desired DisplayMode from the list of modes
 // returned by gd.getDisplayModes() ...

 if (gd.isFullScreenSupported()) {
     gd.setFullScreenWindow(frame);
 } else {
    // proceed in non-full-screen mode
    frame.setSize(...);
    frame.setLocation(...);
    frame.setVisible(true);
 }

 if (gd.isDisplayChangeSupported()) {  // Sometime it does return false, however the Display Change is still possible. So, this checking is not a must.
     gd.setFullScreenWindows(frame); // Important!! Call this before setDisplayMode, otherwise you'll got UnsupportedOperationExaption.
     gd.setDisplayMode(newDisplayMode);
 }
于 2016-06-16T13:01:09.937 回答