Java 为什么我的计划没有对;Alt"+&引用;F4";?
我正在为一个小java游戏开发GUI。我有一个类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
窗口
,它扩展了一个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)
获取小程序的顶级窗口。