如何在全屏幕中逃离Java swing窗口?

时间:2017-09-04 12:49:14

标签: java eclipse swing fullscreen

我在日食中建立了一个可以在打开时进入全屏的摇摆窗口,但是无法切换全屏。

我尝试过在线研究(我知道类似的主题),但在尝试解决方案时遇到了问题。

这是我的JFrame

    private void initialize()
    {
    frmCpStats = new JFrame();
    frmCpStats.setTitle("CP Stats");
    Toolkit tk = Toolkit.getDefaultToolkit();
    int x =((int) tk.getScreenSize().getWidth());
    int y =((int) tk.getScreenSize().getHeight());
    frmCpStats.setExtendedState(JFrame.MAXIMIZED_BOTH);
    frmCpStats.setSize(x, y);
    frmCpStats.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frmCpStats.setUndecorated(true);
     KeyStroke k = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
     int w = frmCpStats.WHEN_IN_FOCUSED_WINDOW;
     dialog.getRootPane().registerKeyboardAction(e -> window.dispose(), k, w);
    }     

    public static void main(String[] args) {

    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                StatsDisplay window = new StatsDisplay();
                window.frmCpStats.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });

    }
    public StatsDisplay() {
        initialize();
    }

Eclipse使用Cannot be resolved or is not a fieldVK_ESCAPE识别错误WHEN_IN_FOCUSED_WINDOW,并使用dialog cannot be resolved识别dialog。我对摆动的实际工作方式并不熟悉,所以我不知道为什么会出现这些错误。

2 个答案:

答案 0 :(得分:0)

你快到了。 Key Bindings适用于这种情况。请注意我的MCVE:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

import javax.swing.*;

public class StatsDisplay {
    private JFrame frmCpStats;

    private void initialize() {
        frmCpStats = new JFrame();

        JPanel contentPane = (JPanel) frmCpStats.getContentPane();           
        int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
        InputMap inputMap = contentPane.getInputMap(condition);
        ActionMap actionMap = contentPane.getActionMap();

        KeyStroke escapeStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);

        inputMap.put(escapeStroke, escapeStroke.toString());
        actionMap.put(escapeStroke.toString(), new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                frmCpStats.dispose();
            }
        });

        frmCpStats.setTitle("CP Stats");
        Toolkit tk = Toolkit.getDefaultToolkit();
        int x = ((int) tk.getScreenSize().getWidth());
        int y = ((int) tk.getScreenSize().getHeight());
        frmCpStats.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frmCpStats.setSize(x, y);
        frmCpStats.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmCpStats.setUndecorated(true);
    }

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    StatsDisplay window = new StatsDisplay();
                    window.frmCpStats.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

    }

    public StatsDisplay() {
        initialize();
    }
}

好奇你为什么在你正在试图处理的frmCpStats JFrame时调用window.dispose()

答案 1 :(得分:-1)

删除这些代码行

frmCpStats.setExtendedState(JFrame.MAXIMIZED_BOTH);
frmCpStats.setUndecorated(true);