25-GUI-05-GUI(鼠标事件)

/*
 * 由于鼠标是任何组件都具备(所有组件都可用鼠标监听,即都可被鼠标操作),所以去Component类中找,发现方法:
 * 		
 * 		public void addMouseListener(MouseListener l)添加指定的鼠标侦听器,以接收发自此组件的鼠标事件。如果侦听
 * 器 l 为 null,则不会抛出异常并且不执行动作。
 * 
 * 点进MouseListener,发现其内有5个方法,那么必须有适配器,即MouseAdapter,原理与作用同WindowAdapter,这里不再说明。
 */

package demo;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;



public class MouseListenerDemo {

/*
 * 将程序所涉及的组件先用成员变量定义出来。先明确程序需要多少组件。真正new的时候,对这些组件初始化。
 */
		private Frame f ;
		private TextField tf;
		private Button but;
		
		public MouseListenerDemo() {
			
			init();//该自定义函数用于对组件初始化
			
		}

		private void init() {
			
			f = new Frame("演示鼠标监听");
			f.setBounds(400, 200, 500, 400);
			f.setLayout(new FlowLayout());
			
			tf = new TextField(15);//该构造函数创建一个文本框,共15列,TextField共有4个构造函数,详见API
			
			but = new Button("一个按钮");
			
			f.add(tf);
			f.add(but);
			
			myEvent();
			
			f.setVisible(true);
			
		}

		private void myEvent() {
			
			f.addWindowListener(new WindowAdapter() {

				@Override
				public void windowClosing(WindowEvent e) {
					
					System.exit(0);
					
				}
				
			});
			
			//在Button上添加鼠标监听器。
			
			but.addMouseListener(new MouseAdapter() {

//这里同WindowAdapter,想实现什么功能就复写什么方法,这里我们想实现点击鼠标就进入的功能,所以复写mouseEntered方法。

				int count = 1;//【注意】count不要定义在mouseEntered方法内,那样每操作一次鼠标,count都被初始化为1,不会自增
		@Override
				public void mouseEntered(MouseEvent e) {
					
					//System.out.println("mouse enter..."+count++);
/*
 * 这里有个现象,就是鼠标碰到按钮,还没点击,就输出mouse enter...1,那是因为MouseListener接口中5个方法(详见API)
 * 分别对应鼠标进入、离开、按下、释放、按下并释放的动作,如mouseEntered方法就是鼠标进入到组件上时调用,即鼠标
 * 碰到Button就调用,所以出现该现象。
 */
					tf.setText("mouse enter..."+count++);//setText()方法是TextField类特有方法,用于在文本框中添加文字
/*
 * 鼠标每碰到按钮,在文本框中就会出现"mouse enter..."+count++对应的内容,如果想让鼠标点击并释放才触发效果,可以复写
 * mouseClicked()方法
 */
					
/*
 * 【需求】鼠标双击才触发效果,其余操作均不触发
 * 发现mouseListener接口内的5个方法没有对应双击的,那么从5个方法的参数MouseEvent入手,发现其内可以通过getClickCount()
 * 方法获取鼠标点击次数,那么就加个if判断,只有点击2次才触发效果
 * 将这里复写的方法改为mouseClicked(),其内代码为:
 * if(e.getClickCount()==2)
 *		tf.setText("mouse double click..."+count++);
 * 即可实现需求
 */

					
				}
				
			});
			
		}
		
		public static void main(String[] args){
			
			new MouseListenerDemo();
		
		}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值