全屏缩放

时间:2013-09-13 13:42:09

标签: java jframe screen fullscreen scale

我有一个JFrame对象,它是1280乘768(我将来可以将它改为1024乘以768)。

我通过调用以下代码行使窗口全屏显示:

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

('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:无法更改显示模式

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

1 个答案:

答案 0 :(得分:0)

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

在官方docs of 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);
 }