Java GUI设计第7篇:鼠标事件

在本篇中,我们将介绍一些鼠标事件。

鼠标事件主要有两种类型,一种是关于鼠标的按键的,另一种是关于鼠标的移动的。我们将一一介绍。

首先是MouseListener,是有关鼠标按键的。在这里面有5个方法,大家可以看一下:

mouseClicked() 点击了鼠标时
mouseEntered() 当鼠标进入组件时
mouseExited() 当鼠标离开组件时
mousePressed() 当鼠标按下时
mouseReleased() 当鼠标松开时

第一个方法就是在鼠标点击并且松开之后,调用该方法。

第2,3个方法就是当鼠标进入和离开组件时,调用的方法。这里要注意的是这里的组件就是指添加过事件监听器的组件,比如窗口中添加了MouseListener,就是指这个窗口。

第4,5个方法应该比较好理解,就是指按下和松开时,调用的方法。

讲了这么多,下面我们需要有一些应用。

下面设计一个程序,有一个按扭,默认为蓝色,当鼠标点下窗口的空白处时,按扭变为红色,松开时,再变回蓝色。

代码:

package teach7;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class F1 extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private JButton b;
	public F1() {
		this.setSize(400, 300);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		b=new JButton("Java");
		this.setLayout(new FlowLayout());
		b.setBackground(Color.BLUE);//给按扭设置颜色
		//在Color类中有很多的常量,代表各种颜色
		this.add(b);
		this.addMouseListener(new MouseListener() {
			@Override
			public void mouseClicked(MouseEvent e) {
			}
			@Override
			public void mouseEntered(MouseEvent e) {
			}
			@Override
			public void mouseExited(MouseEvent e) {
			}
			@Override
			public void mousePressed(MouseEvent e) {
				b.setBackground(Color.RED);
				//按下鼠标时,设置为红色
			}
			@Override
			public void mouseReleased(MouseEvent e) {
				b.setBackground(Color.BLUE);
				//放开鼠标时,设置为蓝色
			}
		});
	}
	public static void main(String[] args) {
		F1 f=new F1();
		f.setVisible(true);
	}
}

效果:

进入窗口时:

Java GUI设计第7篇:鼠标事件_第1张图片

按下鼠标时:

Java GUI设计第7篇:鼠标事件_第2张图片

这样就实现了。

对于其它的方法,大家可以自己找一些例子。

鼠标移动的事件:

需要使用MouseMotionListener接口,其中有两个方法:

mouseDragged() 鼠标拖动时
mouseMoved() 鼠标移动时

这两个方法的区别是,前者是在鼠标按下时移动,后者是在鼠标松开时移动。

接下来的例子就是,我们需要设计一个没有标题栏的窗口,在鼠标拖动,进行移动窗口。

首先,我们需要用到的是上一次鼠标的位置,根据上一次鼠标的位置和这次鼠标的位置,来确定窗口的偏移量。

代码:

package teach7;

import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;

public class F2 extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private int lastx,lasty;//记录上一次的位置
	public F2() {
		this.setSize(400, 300);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setUndecorated(true);
		this.addMouseMotionListener(new MouseMotionListener() {
			@Override
			public void mouseDragged(MouseEvent e) {
				int x1=getLocation().x;
				int y1=getLocation().y;
				//根据相对位置设置偏移量
				setLocation(x1+e.getX()-lastx,y1+e.getY()-lasty);
			}
			@Override
			public void mouseMoved(MouseEvent e) {
				lastx=e.getX();
				lasty=e.getY();
			}
		});
	}
	public static void main(String[] args) {
		F2 f=new F2();
		f.setVisible(true);
	}
}

效果:

Java GUI设计第7篇:鼠标事件_第3张图片

Java GUI设计第7篇:鼠标事件_第4张图片

这就是利用了鼠标移动来进行窗口移动,对于那么想要自己设计标题栏的同学,有很大的帮助。

你可能感兴趣的:(Java,GUI)