gpt4 book ai didi

java - 如何从声明 JFrame 的类之外的类中关闭 JFrame

转载 作者:行者123 更新时间:2023-12-02 05:55:44 26 4
gpt4 key购买 nike

因此,我正在用 Java 编写蛇游戏,并在一个类中声明我的 JFrame。如您所见,我使用其他类 GamePanel 中的一些类变量(HEIGHTWIDTH)来设置尺寸并创建实例setContentPane()GamePanel。我有另一个类创建 SnakeGame 实例以便实际运行游戏。此类将有一个标题屏幕。这是 SnakeGame 类:

    public final class SnakeGame{
JFrame frame = new JFrame("SnakeGame");
GamePanel g = new GamePanel();
public SnakeGame(){
//the content of the frame is the g object from the GamePanel class
frame.setContentPane(g);
//default close operation is to close when close button is pressed
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//user can't change size of panel
frame.setResizable(false);
frame.pack();

//size is set
frame.setPreferredSize(new Dimension(GamePanel.WIDTH, GamePanel.HEIGHT));
frame.setLocationRelativeTo(null);
//set visible = true so that the user can see it
frame.setVisible(true);
}
}

我希望用户能够按“esc”键或按屏幕按钮从 GamePanel 类中关闭 frame。有什么可行的方法吗?

我尝试使用 SnakeGame 类中返回 frame 的方法,认为我可以从我的 GamePanel 类中调用该方法来使用JFrame 方法可以更改 frame,但这似乎不起作用。

这是 GamePanel 的构造函数,如果有帮助的话:

public GamePanel(){
setPreferredSize(new Dimension(WIDTH, HEIGHT));
setFocusable(true);
requestFocus();
addKeyListener(this);
}

最佳答案

您可以使用 javax.swing.SwingUtilities 中的 SwingUtilities.getWindowAncestor 函数来获取面板的顶部框架。

这是工作代码:

@Override
public void keyPressed(KeyEvent arg0) {
if (arg0.getKeyCode() == 27) { // 27 is ascii code for esc button
JFrame frame = (JFrame)SwingUtilities.getWindowAncestor(this);
frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
}
}

将此代码放入 GamePanelKeyPressed 函数中。

关于java - 如何从声明 JFrame 的类之外的类中关闭 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56014162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com