所以我有一个289个矩形(17x17)的大网格,我需要一些方法来点击它们时改变每个颜色,而不必制作289种不同的事件方法。重新校正根据图案着色:
if(y%2==0){
if(x%2==0)
g2.setColor(Color.WHITE)
else
g2.setColor(Color.BLUE)
}else{
if(x%2!=0)
g2.setColor(Color.WHITE)
else
g2.setColor(Color.RED)
}
除了为每个矩形及其颜色创建一个大的ArrayList(例如{{0,0,Color.WHITE},{x,0,Color.BLUE)之外,我不知道应该从哪里开始}...等等};)。我会使用for循环来使用它们的参数创建每个矩形,但我不知道如何创建ArrayList和Event方法来检测单击哪个(如果有的话)矩形。我该怎么做?
编辑: 我是说,我怎么知道点击了哪个矩形所以我可以改变它的颜色?如果它更容易,这是一个游戏,有两个球员,红色和蓝色。该板是使用上面的脚本制作的。当某个颜色的玩家点击一个白色空间时,棋盘会将矩形颜色改为玩家颜色,这就是我遇到麻烦的地方。无论如何我都不知道玩家何时点击其中一个矩形。我怎么知道玩家何时点击了一个矩形?如果点击它会如何改变它的颜色?
答案 0 :(得分:2)
在构造每个组件时向其添加相同MouseListener
的实例。有一个示例here可以在按下鼠标时更改圆圈的颜色。
附录:根据您修改过的问题,GridButtonPanel
显示了组件如何知道自己的坐标,以及如何根据网格坐标引用组件。