2012-03-01 11 views
1

2つのJFrameを各モニタに1つ表示しようとしていますが、コードが間違ったものを出力しているようです。私の質問は私のものを除きQuestion 2
Question 3
Question 1

はJFrames基本的に上書きし、空白まで表示されているとしなければならない...これらに類似の境界線です。下記のサンプルコードは、私が望むものかどうかを調べるためにテストした質問の1つで、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

コードブロックに一貫性のある論理インデントを使用してください。 –

答えて

0

私が知る限り、あなたはあなたの参照を台無しにします。 JFrameは必要ありませんが、実際にはウィンドウが必要です。

例として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) { 
    } 
}