Warum minimiert Windows XP mein Swing-Vollbildfenster auf meinem zweiten Bildschirm?

StackOverflow https://stackoverflow.com/questions/53820

  •  09-06-2019
  •  | 
  •  

Frage

In der Anwendung, die ich entwickle (in Java/Swing), muss ich ein Vollbildfenster anzeigen zweite Bildschirm des Benutzers.Ich habe dies mit einem Code gemacht, der dem folgenden ähnelt ...Sobald ich in ein vom Windows Explorer geöffnetes Fenster klicke oder sobald ich den Windows Explorer öffne (ich verwende Windows XP), wird das Vollbildfenster minimiert ...

Kennen Sie eine Möglichkeit oder einen Workaround, um dieses Problem zu beheben, oder gibt es etwas Wichtiges, das ich bei Vollbildfenstern nicht 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);

    }

}
War es hilfreich?

Lösung

Normalerweise

, wenn eine Anwendung in „Vollbild“ Modus ist, wird es den gesamten Desktop übernehmen. Für einen Benutzer zu einem anderen Fenster bekommen müßten sie es Alt-Tab. An diesem Punkt Fenster würden die Vollbild-Anwendung minimieren, so dass die andere Anwendung in den Vordergrund kommen könnte.

Das klingt wie es einen Fehler (nicht dokumentierte Funktion ...) sein kann, in den Fenstern. Es soll wohl nicht für ein Dual-Screen-Setup tun.

Eine Möglichkeit zu beheben ist dies eher als Einstellung zu sein „Vollbild“ gerade machen das Fenster die gleiche Größe wie der Bildschirm mit der Stelle (0,0). Sie können Bildschirminformationen aus der GraphicsConfigurations auf dem Graphics .

Andere Tipps

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top