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

Java 如何缩放程序以校正屏幕分辨率?,java,Java,在接下来的四十分钟里,我将在我的大学里举办一场音乐会,我将在几个不同的屏幕上放映一个我写的全屏应用程序。我只能在今晚和低屏幕上找到投影系统,当我插入时,屏幕的分辨率发生了巨大的变化,但当我执行我的程序时,它的工作方式就好像使用了我以前的屏幕分辨率一样。我已经将整个视觉显示编码为精确的像素值,但现在有一半没有显示,因为它被推离屏幕一侧。我尝试在系统首选项中手动更改显示,但没有效果。我尝试创建不同的显示模式以适应分辨率,但我一直收到消息UnsupportedOperationException:Ca

在接下来的四十分钟里,我将在我的大学里举办一场音乐会,我将在几个不同的屏幕上放映一个我写的全屏应用程序。我只能在今晚和低屏幕上找到投影系统,当我插入时,屏幕的分辨率发生了巨大的变化,但当我执行我的程序时,它的工作方式就好像使用了我以前的屏幕分辨率一样。我已经将整个视觉显示编码为精确的像素值,但现在有一半没有显示,因为它被推离屏幕一侧。我尝试在系统首选项中手动更改显示,但没有效果。我尝试创建不同的显示模式以适应分辨率,但我一直收到消息UnsupportedOperationException:CannotChange display mode(无法更改显示模式)。我是否可以将程序缩放到正确的大小或更改为正确的显示模式

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

            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();
Display只是JFrame的直接扩展

如果我没有得到这个工作,我的学位模块就不及格。请不要让我失望!谢谢大家!


编辑:修复了异常,但尽管设置了800、600、60、60,但程序似乎根本不会改变分辨率。

您可以将显示模式调低到大多数投影机支持的(1024、768、60、60)。最坏的情况是,将其降到8006006060-但是,在画布上绘制的任何硬编码像素值超出显示模式范围的内容都不会再出现在屏幕上。

我的解决方案不是OP考虑的问题。但我相信它解决了你的问题


抓取VirtualBox(或支持扩展模式的任何其他VM)。花20分钟在上面安装一个操作系统,然后在里面运行你的程序。许多虚拟机支持缩放模式,即来宾操作系统会认为它运行的是X1*Y1分辨率,但在您的屏幕上,它实际上显示为X2*Y2,由虚拟机缩放。因此,您可以让程序以任何分辨率显示良好。

更改了它。然而,即使是800600、60、60,似乎也没有明显的变化。如果您为特定的分辨率设计了应用程序,那么我怀疑您真的能做些什么。唯一“真正”的机会是尝试添加一个
AffineTransform
,将图形从设计的分辨率缩放到预期的分辨率,但您需要将此添加到绘制例程中。