就在刚刚写好前一篇博客后,我本来想说“JButton如果可以实现一个MouseListener就太好了,可惜它实现不了”于是写了一例子。
结果证明我错了。
可以对JButton进行鼠标点击的监听(具体这里我只是简单的实现状态的切换,并没有再往下进行下去了)
当初我做上一步的时候,为了实现地雷的标记,于是放弃了JButton自己的ActionListener,而选用了MouseListener。可是后来无法监听鼠标事件,
现在想来,应该是少写了一句addMouseListener();
太好了,那么,后面我们就用这个Button来实现对地雷块的操作。
具体只改变了MyButton的一部分,代码如下:
class MyButton extends JButton implements MouseListener
{
private boolean is_mine = false;
private int status = 0;
boolean is_marked = false;
public MyButton()
{
this.setLayout(null);
setIcon(new ImageIcon("a.png"));
setMargin(new Insets(0,0,0,0));
setIconTextGap(0);
setBorderPainted(false);
setBorder(null);
setText(null);
addMouseListener(this);
}
public void beMarked()
{
this.setIcon(new ImageIcon("beMarked.png"));
}
public void digOut()
{
switch(status)
{
case -1:
this.setIcon(new ImageIcon("c.png"));
break;
case 0:
this.setIcon(new ImageIcon("0.png"));
break;
case 1:
this.setIcon(new ImageIcon("1.png"));
break;
case 2:
this.setIcon(new ImageIcon("2.png"));
break;
case 3:
this.setIcon(new ImageIcon("3.png"));
break;
case 4:
this.setIcon(new ImageIcon("4.png"));
break;
case 5:
this.setIcon(new ImageIcon("5.png"));
break;
case 6:
this.setIcon(new ImageIcon("6.png"));
break;
case 7:
this.setIcon(new ImageIcon("7.png"));
break;
case 8:
this.setIcon(new ImageIcon("8.png"));
break;
}
}
public void setStatus(int copy_status)
{
status = copy_status;
}
public boolean getIsMine()
{
return is_mine;
}
@Override
public void mouseClicked(MouseEvent e)
{
/**击左键*/
if(e.getButton()==e.BUTTON1)
{
digOut();
}
/**击右键*/
else if(e.getButton() == e.BUTTON3)
{
marked();
}
}
public void marked()
{
if(is_marked)
{
is_marked = false;
setIcon(new ImageIcon("no_marked.png"));
}
else
{
is_marked = true;
setIcon(new ImageIcon("marked.png"));
}
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
}
修改后的源代码及资源已经上传,结果的截图如下: