Java 为什么我的计划没有对;Alt"+&引用;F4";?

Java 为什么我的计划没有对;Alt"+&引用;F4";?,java,swing,Java,Swing,我正在为一个小java游戏开发GUI。我有一个类窗口,它扩展了一个JFrame,包含了一个MainMenuPanel的对象,一个类扩展了JPanel并包含了一些JButtons 我希望在单击选项按钮后,将主菜单面板替换为选项面板的对象,该类还扩展了JPanel 我使用以下代码实现了这一点: public class MainMenuPanel extends JPanel implements ActionListener { private Window window; p

我正在为一个小java游戏开发GUI。我有一个类
窗口
,它扩展了一个
JFrame
,包含了一个
MainMenuPanel
的对象,一个类扩展了
JPanel
并包含了一些
JButtons

我希望在单击
选项按钮后,将
主菜单面板
替换为
选项面板
的对象,该类还扩展了
JPanel

我使用以下代码实现了这一点:

public class MainMenuPanel extends JPanel implements ActionListener
{
    private Window window;  
    private JButton playButton;
    private JButton optionsButton;
    private ImageIcon buttonIcon;
    private SavegamesPanel savegamesPanel;
    private OptionsPanel optionsPanel;

    public MainMenuPanel(Window w)
    {
        window = w;

        setSize(window.getContentPane().getSize());
        setLocation(0, 0);
        setLayout(null);

        playButton = new JButton();
        optionsButton = new JButton();

        buttonIcon = new ImageIcon("res/buttonIcon.png");

        playButton.setIcon(buttonIcon);     
        playButton.setSize(200, 50);
        playButton.setLocation(((window.getContentPane().getWidth() - 200) / 2), ((window.getContentPane().getHeight() - 200) / 2));
        playButton.addActionListener(this);

        optionsButton.setIcon(buttonIcon);
        optionsButton.setSize(200, 50);
        optionsButton.setLocation(((window.getContentPane().getWidth() - 200) / 2), (((window.getContentPane().getHeight() - 200) / 2) + 50));
        optionsButton.addActionListener(this);

        add(playButton);
        add(optionsButton);
    }

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        if(e.getSource().equals(playButton))
        {
            //do things
        }
        else if(e.getSource().equals(optionsButton))
        {
            window.remove(this);

            optionsPanel = new OptionsPanel(window, null, 0);

            window.add(optionsPanel);
            window.repaint();
        }
    }
}
问题是,在面板更改了组合键Alt+F4之后,组合键Alt+F4不再起作用,我不明白为什么

你可能会说这不是很重要,但它会给我以后带来其他问题


所以如果你能帮助我,我会非常高兴

如注释中所述,Alt+F4只是告诉活动窗口关闭。窗口需要实际响应此事件才能实际发生任何事情

您可以使用
setDefaultCloseOperation(JFrame.EXIT\u ON\u CLOSE)
(例如,在JFrame构造链中的某个位置),也可以自己使用
java.awt.event.WindowListener显式侦听窗口事件。窗口关闭时(通过按钮或Alt-F4)会调用WindowListener,您需要主动关闭窗口(例如,使用
setVisible(false)


除非你做了(非常)奇怪的事情,否则你在窗口内的面板应该对窗口关闭的行为没有任何影响。

Alt+F4,至少在Windows中,通常用于关闭当前活动窗口。没错。我的问题是,面板更改后,它不会关闭当前活动窗口。请不要使用空布局。Swing设计用于布局管理器。然后不要使用setSize()或setLocation(),布局管理器将确定大小和位置。如果要替换框架上的面板,请使用主面板上的。主面板将包含两个子面板,您可以控制在任何给定时间哪个子面板可见。欢迎使用SO!你介意创建一个(即,一个简单的主站)来重现这个问题吗?帮助您会更容易:)@so.koni:您可以尝试使用
SwingUtilities.windowForComponent(c)或<代码>SwingUtilities.getWindow(c)
获取小程序的顶级窗口。