添加到JFrame后,游戏变得无法响应

时间:2016-12-16 01:54:12

标签: java swing

我正在学习如何制作Pacman游戏,所以我制作了一个JPanel并在其上添加了一个keyListener。但我也希望显示高分和当前分数,所以我添加了一个JFrame并将JPanel放在那里。现在游戏将无法运行,尽管图像会加载。我试过自己搜索,但这很难,因为我不知道如何准确地描述问题。

以下是代码:

编辑:好的,所以我不知道为什么,但是当我把这些东西放在最后设置GUI而不是游戏再次运行时。也许这是你们谈论的重点事项?无论如何,非常感谢你的帮助!

myMac:apache-ant-1.9.7 mauri$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk
myMac:apache-ant-1.9.7 mauri$ sh build.sh 
Error: JAVA_HOME is not defined correctly.
  We cannot execute /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/bin/java
Bootstrap FAILED
myMac:apache-ant-1.9.7 mauri$ ls /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/bin/java
ls: /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/bin/java: No such file or directory

1 个答案:

答案 0 :(得分:1)

使用布局管理器进行Swing工作。 JFrame的默认布局管理器是BorderLayout。阅读教程以了解BorderLayout的工作原理。

让布局管理器完成其工作并摆脱所有setBounds(...)逻辑。

wall.add(board);
//board.setVisible(true);
addKeyListener(board);
board.setFocusable(true);
//currentScore.setBounds(0,0,100,50);
wall.add(currentScore);

因此,在上面的代码中,您尝试将两个组件添加到墙的BorderLayout.CENTER。 (注意,如果您没有指定约束,则默认为CENTER)。这不会起作用,因为只有一个组件可以在CENTER中显示,所以只有最后一个组件可见。

相反,您可以尝试:

wall.add(currentScore, BorderLayout.PAGE_START);

此外,你班级的基础知识是错误的。 PacManGUI"是一个" JFrame,因此不需要在构造函数中创建第二个框架。查看教程目录。 How to Make Frames还有一个部分可以帮助您入门。