鼠标监听事件
--public interface MouseListenerextends EventListener用于接收组件上“感兴趣”的鼠标事件
(按下、释放、单击、进入或离开)的侦听器接口。(要跟踪鼠标移动和鼠标拖动,请使用 MouseMotionListener。)
--旨在处理鼠标事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 MouseAdapter(仅重写所需的方法)。
--然后使用组件的 addMouseListener 方法将从该类所创建的侦听器对象向该组件注册。当按下、释放或单击(按下并释放)
鼠标时会生成鼠标事件。鼠标光标进入或离开组件时也会生成鼠标事件。发生鼠标事件时,将调用该侦听器对象中的相应方法,
并将 MouseEvent 传递给该方法。
--mouseClicked(MouseEvent e) 鼠标按键在组件上单击(按下并释放)时调用。
--mouseEntered(MouseEvent e) 鼠标进入到组件上时调用。
--mouseExited(MouseEvent e) 鼠标离开组件时调用。
--mousePressed(MouseEvent e) 鼠标按键在组件上按下时调用。
--mouseReleased(MouseEvent e) 鼠标按钮在组件上释放时调用。
//---鼠标的单击次数,属于鼠标事件内的,鼠标事件产生以后才行 。所以找MouseEvent
public class MouseEventextends InputEvent指示组件中发生鼠标动作的事件。当且仅当动作发生时,
鼠标光标处于特定组件边界未被遮掩的部分之上时才认为在该组件上发生了鼠标动作。组件边界可以被可见组件的子组件、
菜单或顶层窗口所遮掩。此事件既可用于鼠标事件(单击、进入、离开),又可用于鼠标移动事件(移动和拖动)。
通过组件对象可为下列活动生成此低级别的事件:
鼠标事件
按下鼠标按键
释放鼠标按键
单击鼠标按键(按下并释放)
鼠标光标进入组件几何图形的未遮掩部分
鼠标光标离开组件几何图形的未遮掩部分
鼠标移动事件
移动鼠标
拖动鼠标
MouseEvent 对象被传递给每一个 MouseListener 或 MouseAdapter 对象,这些对象使用组件的
addMouseListener 方法注册,以接收“令人感兴趣”鼠标事件。(MouseAdapter 对象实现
MouseListener 接口。)所有此类侦听器对象都获得包含鼠标事件的 MouseEvent。
MouseEvent 对象还传递给每一个使用组件的 addMouseMotionListener 方法注册接收鼠标移动事件
的 MouseMotionListener 或 MouseMotionAdapter 方法。(MouseMotionAdapter 对象
实现 MouseMotionListener 接口。)所有此类侦听器对象都获得包含鼠标移动事件的 MouseEvent。
//使用构造方法获得鼠标单击的次数
----getClickCount() 返回与此事件关联的鼠标单击次数。
--键盘监听器
public interface KeyListener extends EventListener用于接收键盘事件(击键)的侦听器接口。
旨在处理键盘事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象 KeyAdapter 类(仅重写有用的方法)。
然后使用组件的 addKeyListener 方法将从该类所创建的侦听器对象向该组件注册。按下、释放或键入键时生成键盘事件。
然后调用侦听器对象中的相关方法并将该 KeyEvent 传递给它。
--keyPressed(KeyEvent e) 按下某个键时调用此方法。
--keyReleased(KeyEvent e) 释放某个键时调用此方法。
--keyTyped(KeyEvent e) 键入某个键时调用此方法。
public class KeyEvent extends InputEvent指示组件中发生击键的事件。
当按下、释放或键入某个键时,由组件对象(如文本字段)生成此低级别事件。该事件被传递给每一个 KeyListener 或
KeyAdapter 对象,这些对象使用组件的 addKeyListener 方法注册,以接收此类事件。(KeyAdapter 对象
实现 KeyListener 接口。)发生事件时,所有此类侦听器对象都获取此 KeyEvent。
public class TextField extends TextComponent
TextField 对象是允许编辑单行文本的文本组件。
--TextField() 构造新文本字段。
--TextField(int columns) 构造具有指定列数的新的空文本字段。
--TextField(String text) 构造使用指定文本初始化的新文本字段。
--TextField(String text, int columns) 构造使用要显示的指定文本初始化的新文本字段,宽度足够容纳指定列数。
*/
import java.awt.*;
import java.awt.event.*;
public class MouseAndKeyEvent {
//定义该图形中所需的组件的引用。
private Frame f;
private Button but;
private TextField tf;
//构造函数里面 一初始化 图形化界面 就具备了基本事件
MouseAndKeyEvent()
{
init();
}
//先不要写组件,把组件和图形化界面分离出来
public void init()
{
f = new Frame("my frame");
//对frame进行基本设置。
//public void setBounds(int x,int y,int width,int height)重绘组件的指定矩形区域。
f.setBounds(300, 100, 600, 500);
//流式布局管理器 从左到右的顺序排列
f.setLayout(new FlowLayout());
//添加文本框 里面的20 设置长度 --TextField(int columns) 构造具有指定列数的新的空文本字段。
tf = new TextField(20);
but = new Button("my button");
f.add(tf);
//将组件添加到frame中
f.add(but);
//在显示窗体之前加载显示窗体事件
myEvent();
//显示窗体
f.setVisible(true);
}
//事件
private void myEvent()
{
//匿名内部类
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)//返回窗体时间
{
System.exit(0);
}
} );
tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
int code = e.getKeyCode();
if(!(code >= KeyEvent.VK_0 && code <= KeyEvent.VK_9))
{
//如果不是1到9之间的数字 则不输入 并打印字符非法
//KeyEvent 父类 InputEvent 下 方法
//void consume() 使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件。
System.out.println(code + "....是非法的");
//屏蔽件
e.consume();
}
}
});
//给but添加一个键盘监听。
but.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
//getKeyCode() 返回与此事件中的键相关联的整数 keyCode。
//getKeyChar() 返回与此事件中的键相关联的字符。
//System.out.println(e.getKeyChar()+"....."+e.getKeyCode());
//d.....68 ?.....16
//getKeyText(int keyCode) 返回描述 keyCode 的 String,如“HOME”、“F1”或“A”。
//System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"....."+e.getKeyCode());
//结果 D.....68 Shift.....16 Escape.....27
//按ESC键退出程序
//if(e.getKeyCode()==27)
//if(e.getKeyCode()==KeyEvent.VK_ESCAPE);
//按CTRL键+回车键 进行操作
if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER);
//System.exit(0);
System.out.println("CTRL键+回车键 ");
/*
按CTRL键+回车键 进行操作
public abstract class InputEvent extends ComponentEvent所有组件级别输入事件的根事件类。
输入事件通常由产生输入事件的源代码进行处理,而在此之前,将他们提交到侦听器中。这样就允许侦听器和组件子类“使用”
事件,以便源代码不会以默认方式处理事件。例如,在 Button 组件上使用 mousePressed 事件将阻止 Button 被激活。
--boolean isControlDown() 返回 Control 修饰符在此事件上是为 down。
*/
}
});
//在该按钮上添加鼠标监听器
but.addMouseListener(new MouseAdapter()
{
private int count = 1;
private int clickcount = 1;
//鼠标划过一次 打印一次
public void mouseEntered(MouseEvent e)
{
System.out.println("鼠标进入到该组件"+count++);
}
//鼠标点击一次打印一次
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount()==2){
System.out.println("双击动作"+clickcount++);
}
//System.out.println("点击动作"+clickcount++);
}
});
but.addActionListener(new ActionListener()
{
//重写父类的方法actionPerformed
public void actionPerformed(ActionEvent e)
{
System.out.println("按钮。退出");
}
});
}
public static void main(String[] args) {
new MouseAndKeyEvent();
}
}
package day22;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class FrameDemo {
//定义该图形中所需的组件的引用。
private Frame f;
private Button but;
//构造函数里面 一初始化 图形化界面 就具备了基本事件
FrameDemo()
{
init();
}
//先不要写组件,把组件和图形化界面分离出来
public void init()
{
f = new Frame("my frame");
//对frame进行基本设置。
//public void setBounds(int x,int y,int width,int height)重绘组件的指定矩形区域。
f.setBounds(300, 100, 600, 500);
//流式布局管理器 从左到右的顺序排列
f.setLayout(new FlowLayout());
but = new Button("my button");
//将组件添加到frame中
f.add(but);
//在显示窗体之前加载显示窗体事件
myEvent();
//显示窗体
f.setVisible(true);
}
//事件
private void myEvent()
{
//匿名内部类
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)//返回窗体时间
{
System.exit(0);
}
} );
//让按钮具备退出程序的功能
//按钮就是事件源
//那么选择哪一个监听器呢
//通过关闭状体实例了解到,想要知道哪个组件具备什么样的特有监听器
//需要查看该组件对象的功能。
/*
Button类 下的 活动监听器 通过查阅Button的API描述。发现支持 addActionListener 监听
public void addActionListener(ActionListener l)添加指定的操作侦听器,
以接收来自此按钮的操作事件。当用户在此按钮上按下或释放鼠标时,发生操作事件。如果 l 为 null,
则不抛出任何异常,也不执行任何操作。
*/
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("按钮。退出");
System.exit(0);
}
});
}
public static void main(String[] args) {
//直接 new
new FrameDemo();
}
}