2012-10-26 97 views
2

我在接下来的四十分钟内在我的大学举办一场音乐会,其中我正在投影一个我在几个不同屏幕上编写的全屏应用程序。我只能在今晚低调地看到投影系统,看到当我的屏幕分辨率急剧变化时,但是当我执行我的程序时,它就像使用我的旧屏幕分辨率一样工作。我已经将整个可视化显示编码为精确的像素值,但现在一半不显示,因为它被推离屏幕的一侧。我试过在系统偏好设置中手动更改显示,但它没有任何作用。我试过创建不同的显示模式来适应分辨率,但我不断收到消息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不要让我失望!谢谢!

编辑:固定EXCEPTION但程序好像不能设置,尽管事情800,600,60,60

+0

如果您已经为特定分辨率设计了应用程序,那么我怀疑您确实可以做什么。您拥有的唯一“真实”机会是尝试并添加一个“AffineTransform”来将您设计的分辨率下的图形缩放到预期的分辨率,但您需要将其添加到您的绘画例程中。 – MadProgrammer

回答

0

您可以向下撞你DISPLAYMODE到(1024,768,60,60),这在所有的改变分辨率大多数投影机都会支持。最坏的情况下,将其降至800,600,600,60 - 但是,任何在画布上绘制的画面上的硬编码像素值在DisplayMode范围之外的任何内容都不会再出现在屏幕上。

+0

更改了它。然而,即使在800,600,60,60,似乎也没有明显的变化。 –

2

我的解决方案并不是OP所想的。但我相信它解决了你的问题。

抓住VirtualBox(或任何其他支持缩放模式的VM)。花20分钟安装一个操作系统,并在其中运行你的程序。许多VM支持缩放模式,即客户机操作系统会认为它的运行分辨率X * Y ,但是在屏幕上,它的实际显示为X * Y ,由VM缩放。因此,您可以让您的程序在任何分辨率下均可正常显示。