Java 如何在JButton数组中模拟特定JButton的移动

Java 如何在JButton数组中模拟特定JButton的移动,java,swing,jframe,jbutton,Java,Swing,Jframe,Jbutton,我想用java做一个小游戏来做作业 我们需要在JFrame窗口中有一个可调整大小的网格,其中包含nxn(n=一些合理的数字,如5或7)字段(在本例中,每个字段都是一个按钮),在该字段上有以下规则: 中间的按钮是一个“黑洞”,有两个玩家。每个玩家有N-1艘飞船供他们使用,他们必须将它们移入黑洞。第一个达到这个目标的玩家获胜。两个玩家的飞船都是对角排列的,朝向和远离中间(黑洞) 诀窍是,当你告诉一艘船朝某个方向前进时,它会朝那个方向前进,直到撞到墙壁或另一艘船 以下是游戏在设置和移动船只时的表现:

我想用java做一个小游戏来做作业

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

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

诀窍是,当你告诉一艘船朝某个方向前进时,它会朝那个方向前进,直到撞到墙壁或另一艘船

以下是游戏在设置和移动船只时的表现:

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

在我用鼠标单击选择一个按钮后,系统应该对其设置焦点(我通过ActionListener尝试了requestFocus(),但它似乎什么都没做)

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

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

另一个问题是,我如何实际模拟运动

基本上,两个团队的宇宙飞船都是蓝色/红色的。其余的块都是白色的,除了中间黑色的黑洞。


我如何使它,当一个选定的按钮得到一个移动命令时,它移动它的setBackGroundColoring,使它在一个块一个块地移动,直到它碰到一堵墙或另一艘船?我甚至不知道从哪里开始,所以我想在这里寻求一些帮助。

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

KeyEvent.VK_UP
KeyEvent.VK_DOWN
KeyEvent.VK_LEFT
KeyEvent.VK_RIGHT
然后采取必要的行动


关于模拟移动,您希望三角形简单地从一个按钮跳到另一个按钮,还是更流畅?

您是否将“.addActionListener(this)”添加到按钮中?没有它,你的按钮就听不到动作。确保您执行以下操作:gameboardButton[i].addActionListener(此);这里显示了一个简单的例子,并引用了一个相关的例子。@Marcelo Tataje是的,当然我已经包括了这个。我已经获得了一些东西,比如单击按钮时将按钮变为红色,以及类似的简单东西,但不知道如何“模拟”运动。@Trashgood对于一周前开始学习Swing的人来说,这个例子确实不简单,说实话,但谢谢。@user1966576:开始。简单的跳跃也就足够了,虽然让它流淌起来可能不会太难。每次单个块移动后,需要重新绘制整个网格。我假设您当前拥有的图像是按钮上的图标,而不是浮动在按钮上的图像。如果是后者,那么就更简单了,因为你只需要每隔几毫秒移动一个像素。如果是前者,则需要从按钮中删除图像,将其绘制在相同位置,然后每隔几毫秒再次移动一个像素。您还应该在Swing中查找双缓冲,以了解如何进行并使其看起来更平滑。