2012-02-07 9 views
2

ここで私の問題は、2つのJframe、1つは制御用で、もう1つはパブリックに表示するためです。 一般の人々が必要としないものを見るのを避けるためには、表示枠をフルスクリーンで表示する必要があります。表示枠を制御するために、他の画面で制御枠を使用できるようにする必要があります。デュアルモニタ付きJavaフルスクリーンjframe

私の問題は、今日、Ubuntuとデュアルスクリーンモードでこのように動作しても問題ありませんが、Windows 7のビジネスでは64(まだ他のバージョンは試していません)です。ディスプレイフレームは実際にフルスクリーンになります。私はディスプレイフレーム(コントロールフレームのインクルード)の外のどこかをクリックすると、ディスプレイフレームは自動的に最小限に抑えられます。私はゲストのそれはウィンドウで問題を最大限に動作を最小限に抑えるが、私は本当にそれを動作させるようにしたい。 私は非常に汚れた回避策を知っています。それは、ディスプレイフレームを自分の画面のサイズにし、ディスプレイフレームを良好な座標に配置することにあります。

私がしていることのサンプルコードです。
Displayingフレームをフルスクリーンで表示するには、制御フレームにフォーカスを合わせ、キーF11を押します。または(フランス語)
フレームをcontrolingに相当フレーム

package ihm; 
import java.awt.Graphics; 
import java.awt.Image; 
import javax.swing.plaf.basic.BasicTabbedPaneUI; 

public class GameFrame extends javax.swing.JFrame { 

    public GameFrame() { 
     initComponents(); 
    } 


    @SuppressWarnings("unchecked")    
    private void initComponents() { 

     mainPanel = new javax.swing.JTabbedPane(); 
     gamePanel = new javax.swing.JPanel(){ 
      public void paintComponent(Graphics g){ 
       super.paintComponent(g); 
       if(backgroundImage != null){ 
        g.drawImage(backgroundImage, 0, 0, this.getWidth(),this.getHeight(),null); 
       } 
      } 
     }; 
     votePanel = new javax.swing.JPanel(); 
     countdownPanel = new javax.swing.JPanel(); 
     bienvenuePanel = new javax.swing.JPanel(); 
     adsPanel = new javax.swing.JPanel(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     setTitle("ImproAffichage"); 
     setAlwaysOnTop(true); 
     setBackground(new java.awt.Color(255, 179, 0)); 
     setForeground(java.awt.Color.white); 
     setUndecorated(true); 
     getContentPane().setLayout(new java.awt.GridLayout(1, 1)); 

     mainPanel.setTabLayoutPolicy(javax.swing.JTabbedPane.SCROLL_TAB_LAYOUT); 

     gamePanel.setBackground(new java.awt.Color(255, 168, 0)); 
     gamePanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(40, 40, 40, 40)); 
     gamePanel.setMinimumSize(new java.awt.Dimension(200, 200)); 
     gamePanel.setLayout(new java.awt.GridLayout(2, 2, 70, 70)); 
     mainPanel.addTab("score", gamePanel); 

     votePanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10)); 
     votePanel.setLayout(new java.awt.GridLayout(1, 0)); 
     mainPanel.addTab("vote", votePanel); 

     countdownPanel.setLayout(new java.awt.GridLayout(1, 0)); 
     mainPanel.addTab("decompte", countdownPanel); 

     bienvenuePanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10)); 
     bienvenuePanel.setLayout(new java.awt.GridLayout(1, 0)); 
     mainPanel.addTab("Bienvenue", bienvenuePanel); 

     adsPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10)); 
     adsPanel.setLayout(new java.awt.GridLayout(1, 0)); 
     mainPanel.addTab("publicité", adsPanel); 

     getContentPane().add(mainPanel); 
     mainPanel.setUI(new BasicTabbedPaneUI() { 

      protected int calculateTabAreaHeight(int tab_placement, int run_count, int max_tab_height) { 
       return 0; 
      } 
     }); 

     pack(); 
    }      


    public static void main(String args[]) { 
     /* 
     * If Nimbus (introduced in Java SE 6) is not available, stay with the 
     * default look and feel. For details see 
     * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(GameFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(GameFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(GameFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(GameFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 

     /* 
     * Create and display the form 
     */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      public void run() { 
       new GameFrame().setVisible(true); 
      } 
     }); 
    } 
    private static GameFrame instance; 
    private Image backgroundImage; 
    private Image decompteImage; 
    private Image bienvenueImage; 
    // Variables declaration - do not modify      
    private javax.swing.JPanel adsPanel; 
    private javax.swing.JPanel bienvenuePanel; 
    private javax.swing.JPanel countdownPanel; 
    private javax.swing.JPanel gamePanel; 
    private javax.swing.JTabbedPane mainPanel; 
    private javax.swing.JPanel votePanel; 
    // End of variables declaration     


    public static GameFrame getInstance() { 
     if (instance == null) { 
      instance = new GameFrame(); 
     } 
     return instance; 
    } 

    public void refresh() { 
     this.validate(); 
     this.repaint(); 
     this.pack(); 
    } 
} 



ControlFrame.java 表示に相当

GameFrame.javaをメニューを使用

package ihm; 
import java.awt.Dimension; 
import java.awt.GraphicsDevice; 
public class ControlFrame extends javax.swing.JFrame { 

    public static ControlFrame getInstance() { 
     if (instance == null) { 
      instance = new ControlFrame(); 
     } 
     return instance; 
    } 

    private ControlFrame() { 
     this.gameFrame = GameFrame.getInstance(); 
     this.gameFrame.setBounds(100, 100, 400, 300); 
     this.gameFrame.pack(); 
     this.gameFrame.setVisible(true); 
     initComponents(); 
    } 

    @SuppressWarnings("unchecked") 
    private void initComponents() { 
     transitionPanel = new javax.swing.JPanel(); 
     jbBienvenue = new javax.swing.JButton(); 
     jbScore = new javax.swing.JButton(); 
     jbVote = new javax.swing.JButton(); 
     jbDecompte = new javax.swing.JButton(); 
     jbPublicite = new javax.swing.JButton(); 
     jpPlayerControl = new javax.swing.JPanel(); 
     jMenuBar1 = new javax.swing.JMenuBar(); 
     mainMenu = new javax.swing.JMenu(); 
     jmScore = new javax.swing.JMenu(); 
     jmiAddTeam = new javax.swing.JMenuItem(); 
     jmiFullscreen = new javax.swing.JMenuItem(); 
     jmiBackground = new javax.swing.JMenuItem(); 
     jMenuItem1 = new javax.swing.JMenuItem(); 
     jmiPointPath = new javax.swing.JMenuItem(); 
     jmOtherImage = new javax.swing.JMenu(); 
     jmiVote = new javax.swing.JMenuItem(); 
     jmiDecompte = new javax.swing.JMenuItem(); 
     jmiBienvenue = new javax.swing.JMenuItem(); 
     jmiAds = new javax.swing.JMenuItem(); 
     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     setTitle("ImproContro"); 
     setAlwaysOnTop(true); 
     setBounds(new java.awt.Rectangle(0, 0, 200, 300)); 
     setForeground(java.awt.Color.white); 
     setPreferredSize(new java.awt.Dimension(400, 500)); 
     setResizable(false); 
     getContentPane().setLayout(new java.awt.BorderLayout(25, 25)); 
     transitionPanel.setLayout(new java.awt.GridLayout(1, 6)); 
     jbBienvenue.setText("Bienvenue"); 
     transitionPanel.add(jbBienvenue); 
     jbScore.setText("Score"); 
     transitionPanel.add(jbScore); 
     jbVote.setText("Aux votes"); 
     transitionPanel.add(jbVote); 
     jbDecompte.setText("Decompte"); 
     transitionPanel.add(jbDecompte); 
     jbPublicite.setText("Publicité"); 
     transitionPanel.add(jbPublicite); 
     getContentPane().add(transitionPanel, java.awt.BorderLayout.PAGE_START); 
     jpPlayerControl.setBackground(new java.awt.Color(255, 220, 0)); 
     jpPlayerControl.setLayout(new java.awt.GridLayout(2, 2, 10, 10)); 
     getContentPane().add(jpPlayerControl, java.awt.BorderLayout.CENTER); 
     mainMenu.setText("File"); 
     jMenuBar1.add(mainMenu); 
     jmScore.setText("Score"); 
     jmiAddTeam.setText("ajouter equipe"); 
     jmScore.add(jmiAddTeam); 
     jmiFullscreen.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F11, 0)); 
     jmiFullscreen.setText("Plein Ecran"); 
     jmScore.add(jmiFullscreen); 
     jmiBackground.setText("image \"fond score\""); 
     jmScore.add(jmiBackground); 
     jMenuItem1.setText("couleur \"fond score\""); 
     jmScore.add(jMenuItem1); 
     jmiPointPath.setText("Icone de point"); 
     jmScore.add(jmiPointPath); 
     jMenuBar1.add(jmScore); 
     jmOtherImage.setText("Autre images"); 
     jmiVote.setText("image \"aux votes\""); 
     jmOtherImage.add(jmiVote); 
     jmiDecompte.setText("image \"fond Decompte\""); 
     jmOtherImage.add(jmiDecompte); 
     jmiBienvenue.setText("image \"Bienvenue\""); 
     jmOtherImage.add(jmiBienvenue); 
     jmiAds.setText("Ajouter image annonce"); 
     jmOtherImage.add(jmiAds); 
     jMenuBar1.add(jmOtherImage); 
     setJMenuBar(jMenuBar1); 
     jmiFullscreen.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F11, 0)); 

     jmiFullscreen.addActionListener(new java.awt.event.ActionListener() { 

      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       jmiFullscreenActionPerformed(evt); 
      } 
     }); 
     pack(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(ControlFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(ControlFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(ControlFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(ControlFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     /* 
     * * Create and display the form 
     */  java.awt.EventQueue.invokeLater(new Runnable() { 

      public void run() { 
       ControlFrame.getInstance().setVisible(true); 
      } 
     }); 
    } 

    private void jmiFullscreenActionPerformed(java.awt.event.ActionEvent evt) { 
     GraphicsDevice gd = this.gameFrame.getGraphicsConfiguration().getDevice(); 

     if (gd.getFullScreenWindow() != null) { 
      gd.setFullScreenWindow(null); 
      this.gameFrame.setResizable(true); 
      this.gameFrame.setPreferredSize(new Dimension(400, 300)); 
     } else { 
      this.gameFrame.setResizable(false); 
      this.gameFrame.setPreferredSize(new Dimension(gd.getDefaultConfiguration().getBounds().getSize())); 
      this.gameFrame.enableInputMethods(false); 
      gd.setFullScreenWindow(this.gameFrame); 
     } 
     refresh(); 
    } 
    private static ControlFrame instance; 
    private GameFrame gameFrame; 
    // Variables declaration - do not modify 
    private javax.swing.JMenuBar jMenuBar1; 
    private javax.swing.JMenuItem jMenuItem1; 
    private javax.swing.JButton jbBienvenue; 
    private javax.swing.JButton jbDecompte; 
    private javax.swing.JButton jbPublicite; 
    private javax.swing.JButton jbScore; 
    private javax.swing.JButton jbVote; 
    private javax.swing.JMenu jmOtherImage; 
    private javax.swing.JMenu jmScore; 
    private javax.swing.JMenuItem jmiAddTeam; 
    private javax.swing.JMenuItem jmiAds; 
    private javax.swing.JMenuItem jmiBackground; 
    private javax.swing.JMenuItem jmiBienvenue; 
    private javax.swing.JMenuItem jmiDecompte; 
    private javax.swing.JMenuItem jmiFullscreen; 
    private javax.swing.JMenuItem jmiPointPath; 
    private javax.swing.JMenuItem jmiVote; 
    private javax.swing.JPanel jpPlayerControl; 
    private javax.swing.JMenu mainMenu; 
    private javax.swing.JPanel transitionPanel; 
    // End of variables declaration 

    public void refresh() { 
     System.out.println("refresh()"); 
     this.gameFrame.refresh(); 
     this.validate(); 
     this.repaint(); 
    } 
} 


EDIT1:
私は両方のウィンドウをフルスクリーンしようとしますが、ファイルチューザが呼び出されたときに、フォーカスがあるため、常にフルスクリーンウィンドウの上部行動にで失われています。

編集2:
私もアイコン化表示するJFrameの上のリスナーを入れてみましたが、私はNORMAL、表示JFrameの要求にフォーカスし、私の第二のフレームに状態を​​変更しようとした場合、それために使用することはできません失われたフォーカス

編集3:
表示枠がfullscreenedされていない場合は制御フレームをクリックすると、それが最小化されないです。

+1

すぐに役立つように、[SSCCE](http://sscce.org/)を投稿してください。 –

+0

私のコードは少し長いですし、私はそれを啓蒙しようとする例です。ありがとうございました – Kiwy

+0

アイコン化されたときにフレームの状態を設定するようなアイデアが見つかりましたが、毎回フォーカスが失われてコントロールフレームを使用できなくなるという問題が発生しました – Kiwy

答えて

2

私自身の問題へだからここに私自身のanwser、私は最終的に使用して、私が思うこの問題を回避するには、私が見つけたことができる唯一のあまりの醜いない問題を回避するには、私の元にはこれに代えて、このコード

private void jmiFullscreenActionPerformed(java.awt.event.ActionEvent evt) {            
    GraphicsDevice gd = this.gameFrame.getGraphicsConfiguration().getDevice(); 

    if (!this.gameFrame.isResizable()) { 
     //gd.setFullScreenWindow(null); 
     this.gameFrame.setResizable(true); 
     this.gameFrame.setPreferredSize(new Dimension(400, 300)); 
    } else { 
     this.gameFrame.setResizable(false); 
     this.gameFrame.setPreferredSize(new Dimension(gd.getDefaultConfiguration().getBounds().getSize())); 
     this.gameFrame.setExtendedState(Frame.MAXIMIZED_BOTH); 
    } 
    refresh(); 
}   

を使用することです例

private void jmiFullscreenActionPerformed(java.awt.event.ActionEvent evt) { 
    GraphicsDevice gd = this.gameFrame.getGraphicsConfiguration().getDevice(); 

    if (gd.getFullScreenWindow() != null) { 
     gd.setFullScreenWindow(null); 
     this.gameFrame.setResizable(true); 
     this.gameFrame.setPreferredSize(new Dimension(400, 300)); 
    } else { 
     this.gameFrame.setResizable(false); 
     this.gameFrame.setPreferredSize(new Dimension(gd.getDefaultConfiguration().getBounds().getSize())); 
     this.gameFrame.enableInputMethods(false); 
     gd.setFullScreenWindow(this.gameFrame); 
    } 
    refresh(); 
} 

だから最終的に私は、Javaのフルスクリーン機能を使用していないと私はちょうどそれがフルスクリーンフレームのように見えるように私のJFrameのいくつかのプロパティを使用します。

あなたのお役に立てることを願っております!

0

thisは、私はuが使用:)と私は同じ問題に直面しているが、問題はJavaのフルスクリーンAPIであるとき、私は、このソリューション を思い付いたカスタム方法を好むあなたに

を助けるかもしれない素敵な一日です。

+0

これは質問に答えるかもしれませんが、ここでの答えの 必須部分を含めると、参照のためのリンクを提供することが望ましいでしょう(http://meta.stackoverflow.com/q/8259)。 –