Итак, я программирую игровую змею на Java, и в одном классе я объявляю свой JFrame.Как видите, я использую некоторые переменные класса из моего другого класса GamePanel
(HEIGHT
и WIDTH
) для задания размеров, а также для создания экземпляра GamePanel
для setContentPane()
.У меня есть другой класс, который делает экземпляр 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» или нажимать экранную кнопку, чтобы закрыть frame
из класса GamePanel
.Есть ли какой-нибудь возможный способ сделать это?
Я попытался использовать метод в классе SnakeGame
, который бы возвратил frame
, думая, что я мог бы вызвать этот метод из моего GamePanel
класса, чтобы использовать методы JFrame дляизмените frame
, но, похоже, это не сработало.
Вот конструктор для GamePanel
, если это поможет:
public GamePanel(){
setPreferredSize(new Dimension(WIDTH, HEIGHT));
setFocusable(true);
requestFocus();
addKeyListener(this);
}