#监听事件
主要分为键盘,鼠标,窗口,列表等在活动时监听他们,在监听到事件对象时运行对应的代码。
一般注册监听方法如下
.addXXXListener();//XXX为具体监听样式
EventObject .getSouce();方法,返回监听对象的监听源
动作事件监听
接口 ActionListener
class text implements ActionListener{
Frame frame=new Frame("登录");
Button b_1=new Button("清空");
//开始填写监视器
b_1.addActionListener(this);//表示当前类作为监听器类
frame.add(b_1,BorderLayout.CENTER);
frame.setSize(400,600);
frame.setVisible(true);
@Override
//重写抽象方法,参数e为事件对象,会自动传入方法
public void actionPerformed(ActionEvent e) {
//当事件对象被检测到时,代码执行体
}
}
窗口事件监听
接口 WindowListener
当想对当前窗口设置时,一般用
Window w=(Window)e.getComponent();
方法,获得窗口的对象。
.dispose();方法关闭窗口
具体监听方法
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.lang.reflect.Constructor;
import javax.swing.JOptionPane;
public class 窗口监听事件 implements WindowListener{
/*
* @喵仔
* 窗口监听,
*/
public 窗口监听事件() {
Frame frame=new Frame("窗口监听事件");
frame.addWindowListener(this);
frame.setSize(400, 600);
frame.setVisible(true);
}
public static void main(String[] args) {
new 窗口监听事件();
}
@Override
public void windowOpened(WindowEvent e) {
//首次打开窗口时
Window w=(Window)e.getComponent();
w.setBackground(Color.red);
}
@Override
public void windowClosing(WindowEvent e) {
// 点击关闭页面按钮时,一般用.dispose方法关闭
Window w=(Window)e.getComponent();
JOptionPane.showMessageDialog(null, "正在关闭窗口");
w.dispose();
}
@Override
public void windowClosed(WindowEvent e) {
//当.dispose使用后,即成功关闭后
JOptionPane.showMessageDialog(null, "窗口已关闭");
}
@Override
public void windowIconified(WindowEvent e) {
//当从正常大小最小化是使用
Window w=(Window)e.getComponent();
w.setBackground(Color.green);
}
@Override
public void windowDeiconified(WindowEvent e) {
// 从最小化变成正常化时
}
@Override
public void windowActivated(WindowEvent e) {
// 当window把他设置为活动窗口时使用,即窗口有变化时
Window w=(Window)e.getComponent();
w.setBackground(Color.blue);
}
@Override
public void windowDeactivated(WindowEvent e) {
//不再是活动状态时
}
}
列表监听
一个swing里的列表组件JComboBox;
是一个下拉框,有.setMode();方法添加选择项。
例:
JComboBox jbbox=new JComboBox();
jbbox.setMode(new DefaultComboBoxModel(new String[]{xx,xx,xx,xx,xx,}));
列表监听的主要接口 ItemListener类
位于java.awt.event包里.
监听对象类 ItemEvent 类
包含的常用方法:
1,读取选中和取消选中两种状态 .getStateChange();
返回int
2,返回受事件影响的项–即被改变的选项名 .getItem();
返回Object
3,返回产生事件的ItemSelectable对象 .getItemSelectable();
返回ItemSelectable
4,返回标识此项的参数字符串 .getparamString();
返回String
重写监听事件方法
@Override
public void itemStateChanged(ItemEvent e) {
//以下方法属于ItemLisrener接口下
if(e.getStateChange()==ItemEvent.SELECTED) {//返回状态变更的类型,ItemEvent.SLEECTED为选定
JOptionPane.showMessageDialog(null, "以选定"+e.getItem()//返回受事件影响的项
+"\n"+e.getItemSelectable()//返回产生事件的ItemSelectable对象,相当于项的大盒子。
+"\n"+e.paramString());//返回标识受事件影响的项的参数字符串
}
if(e.getStateChange()==ItemEvent.DESELECTED) {//ItemEvent.DESLEECTED为取消选定
JOptionPane.showMessageDialog(null, "以取消选定"+e.getItem()//返回受事件影响的项
+"\n"+e.getItemSelectable()//返回产生事件的ItemSelectable对象,相当于这个项的大盒子。
+"\n"+e.paramString());//返回标识受事件影响的项的参数字符串
}
}
鼠标监听
接口:MouseListener
监听鼠标的动作,可以区分鼠标的哪一个按键
方法:.getButton(); 返回int,与MouseEvent里的常量对应。
MouseEvent类的常量
MouseEvent.BUTTON1 代表左键
MouseEvent.BUTTON2 代表中建
MouseEvent.BUTTON3 代表右键
监听器方法如下
@Override
public void mouseClicked(MouseEvent e) {//当鼠标点击时的处理
System.out.println("点击了按键!!!");
}
@Override
public void mouseEntered(MouseEvent e) {//当鼠标移动到组件上的处理,还没有点击时。
System.out.println("进入了鼠标监听!!!");
}
@Override
public void mouseExited(MouseEvent e) {//当鼠标离开组件上方时处理
System.out.println("离开了鼠标监听!!!");
}
@Override
public void mousePressed(MouseEvent e){//鼠标在组件上按下时处理
System.out.println("按下了按键!");
}
public void mouseReleased(MouseEvent e) {//鼠标在组件上松开时处理
System.out.println("松开了按键");
}
鼠标监听执行顺序
上面代码的结果如下
进入了鼠标监听!!!
离开了鼠标监听!!!
进入了鼠标监听!!!
按下了按键!
松开了按键
点击了按键!!!
可以看出 鼠标点击的顺序从前往后依次为:
鼠标按下——鼠标松开——鼠标点击
使用匿名类写重写监听器
首先,导入java.awt.evnet.*;
然后,型如下方代码,重写监听器,重写的类相当于监听器类的子类
或者使用匿名内部类的形式,简化代码。
但是,这样定义的监听器只能使用一次。
Button b_2=new Button("登录");
//在参数内定义匿名内部类,重写抽象方法
b_2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(choice(text_1.getText(),text_2.getText())) {
b=true;
JOptionPane.showMessageDialog(null, "信息正确,登录成功!");
}else {
b=false;
JOptionPane.showMessageDialog(null, "信息错误,登录失败!");
}
}
});
事件监听接口的子类:事件适配器
当我们只用一部分方法时,避免重写多余的抽象方法,造成不必要的工作量。可以使用适配器。
如:WindowListener接口的子类WindowAdapter类是窗口事件适配器
使用方法:
1,extends继承它,在重写需要的方法。
public class WindowAdapterTest extends WindowAdapter{
@Override
public void windowClosing(WindowEvent e) {
}
}
2,写一个关于它的匿名类,重写用的的方法
例:
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
}
});
焦点
让窗口获得焦点
this.setFocusable(true);
重新聚集焦点
.requestFocus