下面的程序是做一个国际象棋的棋盘(国际棋盘的黑白区域全部是由按钮生成)
现想加入如下功能。随便点击一块区域,如果它是黑色的,让它变成白色,如果它是白色,让它变成黑色。
象棋棋盘代码如下:
import java.awt.*;
import java.awt.event.*;
public class ChesBoard extends Frame
{
private Button p;
private MyActionListener my = new MyActionListener();
ChesBoard(String s)
{
super(s);
int i,j;
this.setLayout(new GridLayout(12,12));
//FOR循环中,i用来判断行,如果是奇数行就以白色块开始
//如果是偶数行,就以黑色块开始
for(i=1;i<=12;i++)
{
//For循环中,j用来判断列,
for(j=1;j<=12;j++)
{
if(i%2==0)
{
//如果是奇数行的奇数列,为白色方块,否则是黑色方块
p= new Button();
MyActionListener my =new MyActionListener();
p.addActionListener(my);
if(j%2!=0)
{
p.setBackground(Color.WHITE);
this.add(p);
}
else
{
p.setBackground(Color.BLACK);
this.add(p);
}
}
else
{//如果是偶数行的奇数列,为黑色,否则为白色
p= new Button();
MyActionListener my = new MyActionListener();
p.addActionListener(my);
if(j%2==0)
{
p.setBackground(Color.WHITE);
this.add(p);
}
else
{
p.setBackground(Color.BLACK);
this.add(p);
}
}
}

}
}
class MyActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
//如果该按钮的颜色是黑色,那么将它的颜色变成白色
//如果该按钮的颜色是白色,那么将它的颜色变成黑色

}
}
public static void main(String args[])
{
ChesBoard cb = new ChesBoard("国际象棋棋盘");
cb.setSize(480,480);
cb.setLocation(400,300);
cb.setVisible(true);
}
}由于我在添加按钮的时候,没有设定该按钮的名字,所以一时无法在actionPerformed方法中得到被单击按钮的引用。还请各位帮忙解决如何在actionPerformed方法中得到被单击按钮的引用的问题。

解决方案 »

  1.   

    event有个方法是getsource 取得对象  
    用这个和btn来比较
      

  2.   

    getBackground
    public Color getBackground()
    Gets the background color of this component. Returns:
    this component's background color; if this component does not have a background color, the background color of its parent is returned
    Since: 
    JDK1.0 
    See Also:
    setBackground(java.awt.Color)呵呵 居然给我找到了 
    这样就可以了 
    先判断一下 ,然后改掉