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

时间:2014-11-28 15:17:23

标签: java swing jframe jbutton

我正在尝试用java制作一个小游戏。

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

中间按钮是“黑洞”,有2名玩家。每个玩家拥有他们拥有的N-1艘船只,他们必须将它们移入黑洞。第一个实现这一目标的玩家获胜。两个球员的船只朝向和远离中间(黑洞)对角线对齐。

诀窍是,当你告诉一艘船向一个方向前进时,它会向那个方向行进,直到它碰到一面墙或另一艘船。

以下是游戏对设置的看法以及当您移动船只时:

enter image description here

我的问题是,我已经成功地将所有船只和黑洞放在正确位置。所有这些都是按钮并且是可点击的,所以现在我如何实现以下目标:

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

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

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

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

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

如何制作它以便当所选按钮获得移动命令时,它会移动其setBackGroundColoring,以便逐块移动直到它撞到墙壁或另一艘船?我甚至不知道从哪里开始所以我想我会在这里寻求一些帮助。

1 个答案:

答案 0 :(得分:1)

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

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

然后采取必要的行动。

关于模拟运动,你想让三角形只是从按钮“跳”到按钮,还是更流畅的东西?