因此,我正在用Java编写游戏蛇,然后在一个类中声明我的JFrame。如您所见,我使用其他类d={x : y for x , y in yourdf.groupby(s.cumsum())}
(GamePanel
和HEIGHT
)中的一些类变量来设置尺寸并为{{ 1}}。我还有另一个类可以使SnakeGame实例化,以便实际运行游戏。该课程将有一个标题屏幕。
这是SnakeGame类:
WIDTH
我希望用户能够按'esc'键或按屏幕上的按钮来关闭GamePanel
类中的setContentPane()
。有什么可行的方法吗?
我尝试在 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);
}
}
类中使用一个返回frame
的方法,以为我可以从我的GamePanel
类中调用该方法以使用JFrame方法来更改SnakeGame
,但这似乎不起作用。
如果有帮助,这里是frame
的构造函数:
GamePanel
答案 0 :(得分:0)
您可以使用SwingUtilities.getWindowAncestor
中的javax.swing.SwingUtilities
函数来获取面板的顶部框架。
这是工作代码:
@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));
}
}
将此代码放入GamePanel
的{{1}}函数中。