java - 如何模拟 JButton 数组中特定 JButton 的移动

标签 java swing jframe jbutton

我正在尝试用 java 制作一个小游戏来完成作业。

我们需要在具有 nxn(n= 一些合理的数字,如 5 或 7)字段(在本例中每个字段都是一个按钮)的 JFrame 窗口中有一个可调整大小的网格,并且在该字段上有以下规则:

中间按钮是一个“黑洞”,有2个玩家。每个玩家都有 N-1 艘船只供他们使用,他们必须将它们移入黑洞。第一个做到这一点的玩家获胜。两个玩家的船都朝向和远离中间(黑洞)对角对齐。

诀窍是,当您告诉一艘船朝某个方向行驶时,它会朝那个方向行驶,直到撞到墙壁或另一艘船。

以下是游戏在设置和移动飞船时的样子:

enter image description here

我的问题是,我已经成功地让所有船只和黑洞都处于正确的位置。它们都是按钮并且是可点击的,那么现在我如何实现以下目标:

在我用鼠标单击选择一个按钮后,系统应该将焦点设置在它上面(我通过 ActionListener 尝试了 requestFocus() 但它似乎没有做任何事情)。

然后在设置焦点之后,同一个按钮(上面已经有一个 ActionListener)将有一个 KeyListener,它等待箭头键输入。然后在您输入方向后,该按钮将移动其颜色 - 模拟移动 - 直到它撞到一艘船、墙壁,或者在它从 map 上清除时进入黑洞。

我的问题是,我如何让 Java 知道特定按钮上的 keyListener 应该只在我选择按钮后监听箭头键

另一个是 - 我如何实际模拟运动?

基本上,两队的飞船都是蓝色/红色的。除了中间的黑洞是黑色的,其余的方 block 都是白色的。

How do I make it so that when a selected button gets a movement command, it shifts its setBackGroundColoring so that it shifts over block by block until it hits a wall or another ship?我什至不知道从哪里开始,所以我想我应该在这里寻求一些帮助。

最佳答案

您还应该向按钮添加一个 KeyListener,并以 KeyAdapter 作为参数,当事件触发时,您可以获得事件的键代码,并根据值检查它:

KeyEvent.VK_UP
KeyEvent.VK_DOWN
KeyEvent.VK_LEFT
KeyEvent.VK_RIGHT

然后采取必要的行动。

关于模拟运动,您是想让三角形从一个按钮简单地“跳”到另一个按钮,还是更流畅的东西?

关于java - 如何模拟 JButton 数组中特定 JButton 的移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27191581/

相关文章:

java - 切换语句引号

java - .class 在 log4j 上下文中意味着什么

java - 如何向 JPanel 添加背景图像?

java - Swing 应用程序连续运行约 6 小时后变得无响应

java - 如何在没有网址的情况下单击 ListView 中的图像?

java - Java 中是否有等效的字段集(HTML)?

java - 如何删除 Jtable 标题网格线

java - 如何知道鼠标拖动的方向 - 当它向上或向下时?

java - 如何防止我的 JFrame 卡住?

java - 将多个 JPanel 添加到 JFrame