2012-03-01 58 views
1

我试图显示两个JFrames,每个监视器上一个,代码似乎输出错误的东西。我的问题是类似这些边界线...
Question 1
Question 2
Question 3
除矿与基本被覆盖,并显示为空白的JFrames做。下面的示例代码来自我正在测试的一个问题,看看它是否是我想要的,但JFrames没有显示出我想要的。它们是空白的,即使它们应该显示图标。代码是裸露的,因为我试图弄清楚为什么JFrames变得可以重新定义大小,并且不会像他们应该的那样退出。双监视器系统中的JFrame

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.event.*; 

public class Dual extends JFrame implements ActionListener, ChangeListener { 
    public Dual(String one) { 
     JFrame frame = new JFrame(one); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
     frame.setResizable(false); 
    } 

    public static void showOnScreen(int screen, JFrame frame) { 
     GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
     GraphicsDevice[] gs = ge.getScreenDevices(); 
     if(screen > -1 && screen < gs.length) { 
      gs[screen].setFullScreenWindow(frame); 
     } else if(gs.length > 0) { 
      gs[0].setFullScreenWindow(frame); 
     } else { 
      throw new RuntimeException("No Screens Found"); 
     } 
    } 

    public static void main(String[] args) { 
     showOnScreen(1, new Dual("Test")); 
     showOnScreen(2, new Dual("1...2")); 
     GraphicsDevice[] devices = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices(); 
     for (int i = 0; i < devices.length; i++) { 
      System.out.println("Device " + i + " width: " + devices[ i ].getDisplayMode().getWidth()); 
      System.out.println("Device " + i + " height: " + devices[ i ].getDisplayMode().getHeight()); 
     }  
    } 
} 
+1

请为代码块使用一致的逻辑缩进。 – 2012-03-01 04:48:58

回答

0

是最好的,我可以告诉你搞乱你的引用。你不需要一个JFrame,你实际上需要一个Window。

查看例如http://www.exampledepot.com/egs/java.awt/screen_FullWin.html。我用这个来修改你的代码来创建一个工作模型,最终看起来像这样:

public class Dual extends Window implements ActionListener, ChangeListener { 

    private int screen; 

    public Dual(String one) { 

     super(new Frame()); 

     setLayout(new FlowLayout()); 

     JButton button = new JButton(one); 
     button.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 

       GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
       GraphicsDevice[] gs = ge.getScreenDevices(); 
       if (screen > -1 && screen < gs.length) { 
        gs[screen].setFullScreenWindow(null); 

       } 

       dispose(); 
       System.exit(0); 

      } 
     }); 

     add(button); 

    } 

    public void setScreen(int screen) { 

     this.screen = screen; 

    } 

    public static void showOnScreen(int screen, Dual frame) { 
     GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
     GraphicsDevice[] gs = ge.getScreenDevices(); 
     if (screen > -1 && screen < gs.length) { 
      frame.setScreen(screen); 
      gs[screen].setFullScreenWindow(frame); 
      frame.validate(); 
     } else if (gs.length > 0) { 
      gs[0].setFullScreenWindow(frame); 
     } else { 
      throw new RuntimeException("No Screens Found"); 
     } 
    } 

    public static void main(String[] args) { 
     showOnScreen(1, new Dual("Test")); 
    showOnScreen(2, new Dual("1...2")); 
//  GraphicsDevice[] devices = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices(); 
//  for (int i = 0; i < devices.length; i++) { 
//   System.out.println("Device " + i + " width: " + devices[ i ].getDisplayMode().getWidth()); 
//   System.out.println("Device " + i + " height: " + devices[ i ].getDisplayMode().getHeight()); 
//  }  
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
    } 

    @Override 
    public void stateChanged(ChangeEvent e) { 
    } 
}