Windows XP가 두 번째 화면에서 스윙 전체 화면 창을 최소화하는 이유는 무엇입니까?

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

  •  09-06-2019
  •  | 
  •  

문제

제가 개발 중인 애플리케이션(Java/swing)에서 전체 화면 창을 표시해야 합니다. 두번째 사용자의 화면.아래에서 볼 수 있는 것과 유사한 코드를 사용하여 이 작업을 수행했습니다.Windows 탐색기로 열린 창을 클릭하거나 Windows 탐색기(저는 Windows XP를 사용하고 있습니다)를 열자마자 전체 화면 창이 최소화됩니다...

이 문제를 해결할 수 있는 방법이나 해결 방법을 알고 있습니까? 아니면 전체 화면 창에서 제가 이해하지 못한 중요한 사항이 있습니까?

도와 주셔서 감사합니다,

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

    }

}
도움이 되었습니까?

해결책

일반적으로 응용 프로그램이 "전체 화면" 모드에 있으면 전체 데스크톱을 차지하게 됩니다.사용자가 다른 창으로 이동하려면 Alt 키를 눌러야 합니다.그 시점에서 창은 전체 화면 앱을 최소화하여 다른 애플리케이션이 앞으로 나올 수 있도록 합니다.

이는 Windows의 버그(문서화되지 않은 기능...)인 것 같습니다.듀얼 스크린 설정에서는 이 작업을 수행해서는 안 됩니다.

이 문제를 해결하는 한 가지 옵션은 "전체 화면"으로 설정하는 대신 위치(0,0)를 사용하여 창을 화면과 동일한 크기로 만드는 것입니다.다음에서 화면 정보를 얻을 수 있습니다. GraphicsDevice의 그래픽 구성.

다른 팁

다음 코드는 작동합니다(John에게 감사합니다).전체 화면이 없고 큰 "항상 위에 표시" 창이 표시됩니다.하지만 왜 Windows가 이런 이상한 동작을 일으켰는지는 아직도 알 수 없습니다.

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;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top