2012-10-26 70 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縮放。因此,您可以讓您的程序在任何分辨率下均可正常顯示。