2008-09-10 5 views
3

In der Anwendung, die ich entwickle (in Java/Swing), muss ich ein Vollbild-Fenster auf dem zweiten Bildschirm des Benutzers zeigen. Ich habe dies mit einem Code ähnlich dem, den Sie unten finden ... Sei, sobald ich in ein Fenster von Windows Explorer geöffnet, oder sobald ich Windows Explorer öffnen (ich benutze Windows XP), das Vollbild-Fenster ist minimiert ...Warum minimiert Windows XP mein Swing-Vollbild-Fenster auf meinem zweiten Bildschirm?

Kennen Sie eine Möglichkeit oder Abhilfe, um dieses Problem zu beheben, oder gibt es etwas wichtiges, das ich nicht mit Vollbild-Fenstern verstanden habe?

Danke für die Hilfe,

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); 

    } 

} 

Antwort

1

Normalerweise, wenn eine Anwendung in „Vollbild“ -Modus ist es über den gesamten Desktop nehmen. Damit ein Benutzer zu einem anderen Fenster gelangt, müsste er dazu alt-tab. An diesem Punkt würde Windows die Vollbild-App minimieren, so dass die andere Anwendung in den Vordergrund kommen könnte.

Das klingt wie ein Fehler (undokumentierte Funktion ...) in Windows. Dies sollte wahrscheinlich nicht für einen Dual-Screen-Setup tun.

Eine Option, um dies zu beheben, ist, anstatt es als "Vollbild" zu setzen, nur das Fenster so groß wie der Bildschirm mit der Position (0,0) zu machen. Sie können Bildschirminformationen von der GraphicsConfigurations on the GraphicsDevice erhalten.

+0

das Fenster machen die gleiche Größe wie der Bildschirm mein Notfall-Option war. Ich werde es versuchen und werde das Ergebnis melden ... Aber ich bin gespannt, ob das Verhalten von Windows mit Vollbild-Apps irgendwo dokumentiert ist. –

1

Der folgende Code funktioniert (danke John). Ohne Vollbild und einem großen "Immer im Vordergrund" -Fenster. Aber ich weiß immer noch nicht, warum Fenster dieses stranged Verhalten verursacht ...

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; 
} 
Verwandte Themen