扫雷游戏制作全过程02 之JLabel弯路

就在刚刚写好前一篇博客后,我本来想说“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) {
	}
}

修改后的源代码及资源已经上传,结果的截图如下: 扫雷游戏制作全过程02 之JLabel弯路_第1张图片


你可能感兴趣的:(扫雷游戏制作全过程02 之JLabel弯路)