如何在全屏中跳出javaswing窗口?

wgxvkvu9  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(328)

这个问题在这里已经有答案了

使用keylistener或keyboardfocusmanager(2个答案),全屏窗口无法获得键盘输入
三年前关门了。
我在eclipse中构建了一个swing窗口,当它打开时会进入全屏,但是不可能关闭全屏。
我曾尝试在网上搜索(我知道类似的线索),但我遇到的问题时,试图解决。
这是我的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 resolveddialog . 我对swing的实际工作方式非常陌生,所以我完全不知道为什么会出现这些错误。

9jyewag0

9jyewag01#

删除这些代码行

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

hvvq6cgz2#

你就快到了。密钥绑定在这种情况下工作。请注意我的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();
    }
}

好奇你为什么打电话来 window.dispose() 当你要处理的是FRMCPjFrame的时候??

相关问题