如何缩放程序以纠正屏幕分辨率?

时间:2012-10-26 19:16:23

标签: java

我将在接下来的四十分钟内在我的大学举办一场音乐会,我正在投影我在几个不同屏幕上写的全屏幕应用程序。我今晚只能抓住投影系统并低调看到我的屏幕分辨率大幅变化但是当我执行我的程序时,它就像使用我的旧屏幕分辨率一样工作。我已经将整个视觉显示编码为精确的像素值,但现在它的一半没有显示,因为它被推离屏幕的一侧。我已尝试在系统偏好设置中手动更改显示,但它没有任何效果。我尝试创建不同的显示模式以适应分辨率但我不断收到消息UnsupportedOperationException:无法更改显示模式。无论如何我可以将我的程序缩放到正确的大小或更改为正确的显示模式吗?

以下是我用来初始化全屏的代码:

            frame = new display();
            canvas = new Canvas();
            canvas.addKeyListener(this);
            frame.setUndecorated(true);
            frame.getContentPane().add(canvas);
            strategy = canvas.getBufferStrategy();
            environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
            device = environment.getDefaultScreenDevice();
            oldDisplay = device.getDisplayMode();
try {
            device.setFullScreenWindow(frame);
            newDisplay = new DisplayMode(1440, 900, 60, 60);
            device.setDisplayMode(newDisplay);
catch (Exception ex) { }
            canvas.requestFocus();
            canvas.setFocusTraversalKeysEnabled(false);
            frame.setVisible(true);
            canvas.createBufferStrategy(2);
            strategy = canvas.getBufferStrategy();

显示只是JFrame的直接扩展。

如果我没有得到这个工作,我就失去了我的学位课程。请stackoverflow现在不要让我失望!谢谢!

编辑:FIXED EXCEPTION但是程序似乎根本没有改变分辨率,尽管设置了800,600,60,60。

2 个答案:

答案 0 :(得分:2)

我的解决方案不是OP正在考虑的事情。但我相信它可以解决你的问题。

抓取VirtualBox(或任何其他支持缩放模式的VM)。花20分钟在其上安装操作系统,然后在其中运行程序。许多VM支持缩放模式,即客户操作系统会认为它正在运行分辨率X 1 * Y 1 ,但在屏幕上,它实际上显示为X 2 < / sub> * Y 2 ,由VM缩放。因此,您可以在任何分辨率下显示您的程序。

答案 1 :(得分:0)

您可以将DisplayMode降低到大多数投影机支持的(1024,768,60,60)。最糟糕的情况是,将其降至800,600,60,60 - 但是,在画布上绘制的任何在DisplayMode范围之外的硬编码像素值将不再出现在屏幕上。