2008-09-10 9 views
3

私は(Java/swingで)開発中のアプリケーションで、ユーザのの2番目の画面にフルスクリーンウィンドウを表示する必要があります。 私はこのコードを以下のようなコードを使って行っています... Windowsエクスプローラで開いたウィンドウをクリックするとすぐに、またはWindowsエクスプローラを開くとすぐに(Windows XPを使用しています)、フルスクリーンウィンドウは最小化されています...Windows XPで2番目の画面でスイングフルスクリーンウィンドウが最小化されるのはなぜですか?

この問題を解決する方法や回避策を知っていますか?フルスクリーンウィンドウでわからない重要なことがありますか?

通常の助けのおかげで、

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JWindow; 

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.GraphicsDevice; 
import java.awt.GraphicsEnvironment; 
import java.awt.Window; 

import javax.swing.JButton; 
import javax.swing.JToggleButton; 
import java.awt.Rectangle; 
import java.awt.GridBagLayout; 
import javax.swing.JLabel; 

public class FullScreenTest { 

    private JFrame jFrame = null; // @jve:decl-index=0:visual-constraint="94,35" 
    private JPanel jContentPane = null; 
    private JToggleButton jToggleButton = null; 
    private JPanel jFSPanel = null; // @jve:decl-index=0:visual-constraint="392,37" 
    private JLabel jLabel = null; 
    private Window window; 
    /** 
    * This method initializes jFrame 
    * 
    * @return javax.swing.JFrame 
    */ 
    private JFrame getJFrame() { 
     if (jFrame == null) { 
      jFrame = new JFrame(); 
      jFrame.setSize(new Dimension(474, 105)); 
      jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      jFrame.setContentPane(getJContentPane()); 
     } 
     return jFrame; 
    } 

    /** 
    * This method initializes jContentPane 
    * 
    * @return javax.swing.JPanel 
    */ 
    private JPanel getJContentPane() { 
     if (jContentPane == null) { 
      jContentPane = new JPanel(); 
      jContentPane.setLayout(null); 
      jContentPane.add(getJToggleButton(), null); 
     } 
     return jContentPane; 
    } 

    /** 
    * This method initializes jToggleButton  
    * 
    * @return javax.swing.JToggleButton  
    */ 
    private JToggleButton getJToggleButton() { 
     if (jToggleButton == null) { 
      jToggleButton = new JToggleButton(); 
      jToggleButton.setBounds(new Rectangle(50, 23, 360, 28)); 
      jToggleButton.setText("Show Full Screen Window on 2nd screen"); 
      jToggleButton.addActionListener(new java.awt.event.ActionListener() { 
       public void actionPerformed(java.awt.event.ActionEvent e) { 
        showFullScreenWindow(jToggleButton.isSelected()); 
       } 
      }); 
     } 
     return jToggleButton; 
    } 

    protected void showFullScreenWindow(boolean b) { 
     if(window==null){ 
      window = initFullScreenWindow(); 
     } 
     window.setVisible(b); 

    } 

    private Window initFullScreenWindow() { 
     GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
     GraphicsDevice[] gds = ge.getScreenDevices(); 
     GraphicsDevice gd = gds[1]; 
     JWindow window = new JWindow(gd.getDefaultConfiguration()); 
     window.setContentPane(getJFSPanel()); 
     gd.setFullScreenWindow(window); 
     return window; 
    } 

    /** 
    * This method initializes jFSPanel 
    * 
    * @return javax.swing.JPanel 
    */ 
    private JPanel getJFSPanel() { 
     if (jFSPanel == null) { 
      jLabel = new JLabel(); 
      jLabel.setBounds(new Rectangle(18, 19, 500, 66)); 
      jLabel.setText("Hello ! Now, juste open windows explorer and see what happens..."); 
      jFSPanel = new JPanel(); 
      jFSPanel.setLayout(null); 
      jFSPanel.setSize(new Dimension(500, 107)); 
      jFSPanel.add(jLabel, null); 
     } 
     return jFSPanel; 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     FullScreenTest me = new FullScreenTest(); 
     me.getJFrame().setVisible(true); 

    } 

} 

答えて

1

アプリケーションがデスクトップ全体を引き継ぐ「フルスクリーン」モードになっています。ユーザーが別のウィンドウに移動するには、Altキーを押しながら移動する必要があります。その時点で、ウィンドウはフルスクリーンアプリを最小限に抑えて、他のアプリケーションが前面に来るようにします。

これはWindowsのバグ(文書化されていない機能...)のようです。これはおそらく、デュアルスクリーン設定のためにこれを行うべきではありません。

この問題を解決する1つの方法は、ウィンドウを場所(0,0)の画面と同じサイズにするだけではなく、「フルスクリーン」にすることです。画面情報はGraphicsConfigurations on the GraphicsDeviceから取得できます。

+0

。私はそれを試して、結果を報告します... フルスクリーンアプリケーションのWindowsの動作がどこかに書かれているかどうかを知りたいのです。 –

1

次のコードが機能します(Johnさんに感謝します)。フルスクリーンと大きな「常時オン」ウィンドウなし。画面と同じサイズが私の緊急時のオプションだったウィンドウを作る しかし、Windowsがこのstranged行動を起こした理由を私はまだ知らない...

private Window initFullScreenWindow() { 
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
    GraphicsDevice[] gds = ge.getScreenDevices(); 
    GraphicsDevice gd = gds[1]; 
    JWindow window = new JWindow(gd.getDefaultConfiguration()); 
    window.setContentPane(getJFSPanel()); 
    window.setLocation(1280, 0); 
    window.setSize(gd.getDisplayMode().getWidth(), gd.getDisplayMode().getHeight()); 
    window.setAlwaysOnTop(true); 
    //gd.setFullScreenWindow(window); 
    return window; 
} 
関連する問題