2012-06-01 90 views
5

我希望我不會發布重複的問題,但我無法找到像這樣的問題,所以也許我很安全?無論如何...用於多屏幕的Java GUI全屏幕

對於我正在製作的應用程序,我將同時打開兩個應用程序(兩個獨立的進程和窗口)。運行這些應用程序的計算機將具有多個顯示器。我希望第一個應用程序/窗口全屏顯示,佔用我的一個顯示器(簡單部分),另一個顯示器全屏顯示。如果可能的話,我希望他們以這種方式進行初始化。

目前,我在做我的窗戶通過使用此代碼全屏:

this.setVisible(false); 
this.setUndecorated(true); 
this.setResizable(false); 
myDevice = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 
myDevice.setFullScreenWindow(this); 

類,這是在爲JFrame類的擴展,mydevice在是類型「的GraphicsDevice」的。確實有可能有更好的方法讓我的窗口全屏顯示,這樣我就可以在兩個不同的顯示器上全屏顯示兩個不同的應用程序。

如果我不清楚任何方式,請說,我會嘗試編輯澄清!

回答

5

首先,您需要在每個屏幕設備上放置幀。

frame1.setLocation(pointOnFirstScreen); 
frame2.setLocation(pointOnSecondScreen); 

然後最大化框架,只需調用此對您的JFrame:

frame.setExtendedState(Frame.MAXIMIZED_BOTH); 

這裏是說明一個工作示例:

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Frame; 
import java.awt.GraphicsDevice; 
import java.awt.GraphicsEnvironment; 
import java.awt.Point; 

import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 

public class Test { 
    protected void initUI() { 
     Point p1 = null; 
     Point p2 = null; 
     for (GraphicsDevice gd : GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()) { 
      if (p1 == null) { 
       p1 = gd.getDefaultConfiguration().getBounds().getLocation(); 
      } else if (p2 == null) { 
       p2 = gd.getDefaultConfiguration().getBounds().getLocation(); 
      } 
     } 
     if (p2 == null) { 
      p2 = p1; 
     } 
     createFrameAtLocation(p1); 
     createFrameAtLocation(p2); 
    } 

    private void createFrameAtLocation(Point p) { 
     final JFrame frame = new JFrame(); 
     frame.setTitle("Test frame on two screens"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(new BorderLayout()); 
     final JTextArea textareaA = new JTextArea(24, 80); 
     textareaA.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 1)); 
     panel.add(textareaA, BorderLayout.CENTER); 
     frame.setLocation(p); 
     frame.add(panel); 
     frame.pack(); 
     frame.setExtendedState(Frame.MAXIMIZED_BOTH); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new Test().initUI(); 
      } 
     }); 
    } 

} 
+0

你好, 感謝您的及時回覆!但是,這似乎沒有做任何事情。我評論過我以前使用過的設置將畫面設置爲全屏,並補充說,是的,兩個應用程序全屏顯示,但它們仍然在同一個顯示器上。 我需要的是使兩個應用程序全屏,但在不同的顯示器上。 (如果可能,初始化也是如此) – Sephallia

+0

@Sephallia我使用一個完整的示例更新我的文章,該示例在兩個屏幕上分派兩個幀(如果您有兩個屏幕的話)。訣竅是將框架放置在兩個單獨的屏幕上,然後使其最大化。 –

+0

嘿,我真的不需要完整的工作例子。你以前缺少的部分是setLocation。我以爲我可能需要這樣做,但我真的不知道我可能需要用什麼「點」。非常感謝你!我會upvote您的帖子,但我仍然沒有15聲望x :.抱歉! – Sephallia