java事件监听器

1.动作事件监听器

动作事件(ActionEvent)监听器是Swing中比较常用的事件监听器,很组件的动作都会使用它监听,如按钮单击,下表描述了动作事件监听器的接口与事件源。

事件名称事件源监听接口添加或删除相应类型监听器的方法
ActionEventJButton、JList、JTextField等ActionListeneraddActionListener()、removeActionListener()

动作事件监听器可以为按钮、列表、列表框、文本等组件进行监听,下面以按钮为例将讲解动作监听器的用法,代码如下:


import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Dpc extends JFrame{

	private JButton jb=new JButton("我是按钮,单击我");
	public Dpc(){
		setLayout(null);
		setSize(200,100);
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		Container cp=getContentPane();
		cp.add(jb);
		jb.setBounds(10, 10,100,30);
		//对按钮添加监听器
		jb.addActionListener(new jbAction());
		setVisible(true);
	}
	//创建监听器接口
	class jbAction implements ActionListener{
		public void actionPerformed(ActionEvent arg0) {
			jb.setText("我被单击了");
		}
	}
	public static void main(String[] args) {
		new Dpc();
	}
}

返回结果:

                                

在上述实例中,为按钮设置了动作事件监听器,由于获取事件监听时需要获取实现ActionListener接口的对象,所以定义了一个内部类JbAction,来实现ActionListener接口,同时在该内部类中实现了actionPerformed方法,也就是在actionPerformed()方法中定义当用户单击该按钮后的实现效果。

上述代码中也可以这么写,把内部类写在jb.addActionListener()中,代码如下:

jb.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent arg0) {
		jb.setText("我被单击了");
	}
});

2.键盘事件

当向文本框中输入文本内容时,将触发键盘事件,keyEvent类负责捕获键盘事件,可以通过为组件添加实现了KeyListener接口的监听器类,来处理该组件触发的键盘事件。KeyListener接口共有三个抽象方法,分别发生在击键事件(按下并释放键)、按键被按下(手指按下键但不松开)和按键被释放(手指从按下的键上松开)时被触发。KeyListener接口的具体定义如下:

public interface KeyEvent extends EventListener{
	//发生击键事件时被触发
	public void keyTyped(keyEvent e);
	//按键被按下时被触发
	public void keyPressed(keyEvent e);
	//按键被释放时被触发
	public void keyReleased(keyEvent e);
}

在每个抽象方法中均传入了KeyEvent类对象,KeyEvent类中比较常用的方法如下表:

方法功能简介
getSource()用来获取触发此事件的组件对象,返回值Object对象
getKeyChar()用来获得与此事件中的键相关联字符
getKeyCode()用来获得与此事件中的键相关联的整数keyCode
getrKeyText(int keyCode)用来获得描述keyCode的标签,如A、F1和HOME等
isActionKey()用来查看此事件中的键是否为"动作"键
isControlDown()用来查看Ctrl键在此事件中是否被按下,当返回true时表示被按下
isAltDown()用来查看Alt键在此事件中是否被按下,当返回true时表示被按下
isShiftDown()用来查看Shift键在此事件中是否被按下,当返回true时表示被按下

下面通过一个例子在演示键盘事件的用法,代码如下:

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Demo extends JFrame{
	public Demo() {
		Container ct = getContentPane();
		ct.setLayout(new GridLayout(2,1,10,10));
		setBounds(100, 100, 200, 100);
		
		//设置面板
		JPanel jp1 = new JPanel(new FlowLayout());
		JPanel jp2 = new JPanel(new FlowLayout());
		
		//设置文本框
		JTextField jt = new JTextField();
		jt.setColumns(10);
		jp1.add(jt);

		//设置标签
		JLabel jl = new JLabel();
		jp2.add(jl);
		//设置键盘事件
		jt.addKeyListener(new KeyListener() {
			//按键被按下时被触发
			public void keyReleased(KeyEvent e) {
				//清空文本框内容
				jt.setText("");				
			}
			//按键被按下时被触发
			public void keyPressed(KeyEvent e) {
				jl.setText("你输入的字符为:" + e.getKeyChar());			
			}
			public void keyTyped(KeyEvent e) {
	
			}
		});
		//将面板添加到容器
		ct.add(jp1);
		ct.add(jp2);
		
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
	}
	public static void main(String[] args) {
		new Demo();
	}
}

返回结果:

以下是模拟键盘的代码:


import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import java.awt.Component;

import javax.swing.JButton;
import java.awt.Font;
import javax.swing.SwingConstants;
import javax.swing.border.TitledBorder;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;

import javax.swing.JTextField;

/**
 * 虚拟键盘(键盘的按下与释放)
 */
public class Dpc extends JFrame { //创建“键盘”类继承JFrame
	//声明窗体中的成员组件
	private JPanel contentPane;
	private JTextField textField;
	private JButton btnQ;
	private JButton btnW;
	private JButton btnE;
	private JButton btnR;
	private JButton btnT;
	private JButton btnY;
	private JButton btnU;
	private JButton btnI;
	private JButton btnO;
	private JButton btnP;
	private JButton btnA;
	private JButton btnS;
	private JButton btnD;
	private JButton btnF;
	private JButton btnG;
	private JButton btnH;
	private JButton btnJ;
	private JButton btnK;
	private JButton btnL;
	private JButton btnZ;
	private JButton btnX;
	private JButton btnC;
	private JButton btnV;
	private JButton btnB;
	private JButton btnN;
	private JButton btnM;
	Color green=Color.GREEN;//定义Color对象,用来表示按下键的颜色
	Color white=Color.WHITE;//定义Color对象,用来表示释放键的颜色
	
	ArrayList<JButton> btns=new ArrayList<JButton>();//定义一个集合,用来存储所有的按键ID
	//自定义一个方法,用来将容器中的所有JButton组件添加到集合中
	private void addButtons(){
		for(Component cmp :contentPane.getComponents()){//遍历面板中的所有组件
			if(cmp instanceof JButton){//判断组件的类型是否为JButton类型
				btns.add((JButton)cmp);//将JButton组件添加到集合中
			}
		}
	}

	/**
	 * 主方法
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() { //使得Runnable中的的run()方法在the system EventQueue的指派线程中被调用
			public void run() {
				try {
					Dpc frame = new Dpc(); //创建KeyBoard对象
					frame.setVisible(true); //使frame可视
					frame.addButtons();//初始化存储所有按键的集合
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * 创建JFrame窗体
	 */
	public Dpc() { //KeyBoard的构造方法
		setTitle("\u865A\u62DF\u952E\u76D8\uFF08\u6A21\u62DF\u952E\u76D8\u7684\u6309\u4E0B\u4E0E\u91CA\u653E\uFF09"); //设置窗体题目
		setResizable(false); //不可改变窗体宽高
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体关闭的方式
		setBounds(100, 100, 548, 280); //设置窗体的位置和宽高
		/**
		 * 创建JPanel面板contentPane置于JFrame窗体中,并设置面板的背景色、边距和布局
		 */
		contentPane = new JPanel();
		contentPane.setBackground(Color.WHITE);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		/**
		 * 创建按钮button置于面板contentPane中,设置按钮的背景色、位置、宽高以及按钮中的字体位置、内容、样式
		 */
		btnQ = new JButton("Q");
		btnQ.setBackground(white);
		btnQ.setVerticalAlignment(SwingConstants.TOP);
		btnQ.setHorizontalAlignment(SwingConstants.LEADING);
		btnQ.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnQ.setBounds(0, 60, 47, 45);
		contentPane.add(btnQ);
		/**
		 * 创建按钮button_2置于面板contentPane中,设置按钮的背景色、位置、宽高以及按钮中的字体位置、内容、样式
		 */
		btnW = new JButton("W");
		btnW.setBackground(white);
		btnW.setVerticalAlignment(SwingConstants.TOP);
		btnW.setHorizontalAlignment(SwingConstants.LEADING);
		btnW.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnW.setBounds(55, 60, 49, 45);
		contentPane.add(btnW);
		/**
		 * 创建按钮button_3置于面板contentPane中,设置按钮的背景色、位置、宽高以及按钮中的字体位置、内容、样式
		 */
		btnE = new JButton("E");
		btnE.setBackground(white);
		btnE.setVerticalAlignment(SwingConstants.TOP);
		btnE.setHorizontalAlignment(SwingConstants.LEADING);
		btnE.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnE.setBounds(110, 60, 45, 45);
		contentPane.add(btnE);
		/**
		 * 创建按钮button_4置于面板contentPane中,设置按钮的背景色、位置、宽高以及按钮中的字体位置、内容、样式
		 */
		btnR = new JButton("R");
		btnR.setBackground(white);
		btnR.setVerticalAlignment(SwingConstants.TOP);
		btnR.setHorizontalAlignment(SwingConstants.LEADING);
		btnR.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnR.setBounds(165, 60, 45, 45);
		contentPane.add(btnR);
		/**
		 * 创建按钮button_5置于面板contentPane中,设置按钮的背景色、位置、宽高以及按钮中的字体位置、内容、样式
		 */
		btnF = new JButton("F");
		btnF.setBackground(white);
		btnF.setVerticalAlignment(SwingConstants.TOP);
		btnF.setHorizontalAlignment(SwingConstants.LEADING);
		btnF.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnF.setBounds(195, 125, 45, 45);
		contentPane.add(btnF);
		/**
		 * 创建按钮button_6置于面板contentPane中,设置按钮的背景色、位置、宽高以及按钮中的字体位置、内容、样式
		 */
		btnD = new JButton("D");
		btnD.setBackground(white);
		btnD.setVerticalAlignment(SwingConstants.TOP);
		btnD.setHorizontalAlignment(SwingConstants.LEADING);
		btnD.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnD.setBounds(137, 125, 45, 45);
		contentPane.add(btnD);
		
		btnT = new JButton("T");
		btnT.setVerticalAlignment(SwingConstants.TOP);
		btnT.setHorizontalAlignment(SwingConstants.LEADING);
		btnT.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnT.setBackground(white);
		btnT.setBounds(220, 60, 45, 45);
		contentPane.add(btnT);
		
		btnY = new JButton("Y");
		btnY.setVerticalAlignment(SwingConstants.TOP);
		btnY.setHorizontalAlignment(SwingConstants.LEADING);
		btnY.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnY.setBackground(white);
		btnY.setBounds(275, 60, 45, 45);
		contentPane.add(btnY);
		
		btnU = new JButton("U");
		btnU.setVerticalAlignment(SwingConstants.TOP);
		btnU.setHorizontalAlignment(SwingConstants.LEADING);
		btnU.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnU.setBackground(white);
		btnU.setBounds(330, 60, 45, 45);
		contentPane.add(btnU);
		
		btnI = new JButton("I");
		btnI.setVerticalAlignment(SwingConstants.TOP);
		btnI.setHorizontalAlignment(SwingConstants.LEADING);
		btnI.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnI.setBackground(white);
		btnI.setBounds(385, 60, 45, 45);
		contentPane.add(btnI);
		
		btnO = new JButton("O");
		btnO.setVerticalAlignment(SwingConstants.TOP);
		btnO.setHorizontalAlignment(SwingConstants.LEADING);
		btnO.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnO.setBackground(white);
		btnO.setBounds(440, 60, 46, 45);
		contentPane.add(btnO);
		
		btnP = new JButton("P");
		btnP.setVerticalAlignment(SwingConstants.TOP);
		btnP.setHorizontalAlignment(SwingConstants.LEADING);
		btnP.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnP.setBackground(white);
		btnP.setBounds(495, 60, 45, 45);
		contentPane.add(btnP);
		
		btnA = new JButton("A");
		btnA.setVerticalAlignment(SwingConstants.TOP);
		btnA.setHorizontalAlignment(SwingConstants.LEADING);
		btnA.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnA.setBackground(white);
		btnA.setBounds(23, 125, 45, 45);
		contentPane.add(btnA);
		
		btnS = new JButton("S");
		btnS.setVerticalAlignment(SwingConstants.TOP);
		btnS.setHorizontalAlignment(SwingConstants.LEADING);
		btnS.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnS.setBackground(white);
		btnS.setBounds(82, 125, 45, 45);
		contentPane.add(btnS);
		
		btnG = new JButton("G");
		btnG.setVerticalAlignment(SwingConstants.TOP);
		btnG.setHorizontalAlignment(SwingConstants.LEADING);
		btnG.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnG.setBackground(white);
		btnG.setBounds(251, 125, 45, 45);
		contentPane.add(btnG);
		
		btnH = new JButton("H");
		btnH.setVerticalAlignment(SwingConstants.TOP);
		btnH.setHorizontalAlignment(SwingConstants.LEADING);
		btnH.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnH.setBackground(white);
		btnH.setBounds(306, 125, 45, 45);
		contentPane.add(btnH);
		
		btnJ = new JButton("J");
		btnJ.setVerticalAlignment(SwingConstants.TOP);
		btnJ.setHorizontalAlignment(SwingConstants.LEADING);
		btnJ.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnJ.setBackground(white);
		btnJ.setBounds(361, 125, 45, 45);
		contentPane.add(btnJ);
		
		btnK = new JButton("K");
		btnK.setVerticalAlignment(SwingConstants.TOP);
		btnK.setHorizontalAlignment(SwingConstants.LEADING);
		btnK.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnK.setBackground(white);
		btnK.setBounds(416, 125, 47, 45);
		contentPane.add(btnK);
		
		btnL = new JButton("L");
		btnL.setVerticalAlignment(SwingConstants.TOP);
		btnL.setHorizontalAlignment(SwingConstants.LEADING);
		btnL.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnL.setBackground(white);
		btnL.setBounds(471, 125, 45, 45);
		contentPane.add(btnL);
		
		btnZ = new JButton("Z");
		btnZ.setVerticalAlignment(SwingConstants.TOP);
		btnZ.setHorizontalAlignment(SwingConstants.LEADING);
		btnZ.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnZ.setBackground(white);
		btnZ.setBounds(39, 190, 45, 45);
		contentPane.add(btnZ);
		
		btnX = new JButton("X");
		btnX.setVerticalAlignment(SwingConstants.TOP);
		btnX.setHorizontalAlignment(SwingConstants.LEADING);
		btnX.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnX.setBackground(white);
		btnX.setBounds(107, 190, 45, 45);
		contentPane.add(btnX);
		
		btnC = new JButton("C");
		btnC.setVerticalAlignment(SwingConstants.TOP);
		btnC.setHorizontalAlignment(SwingConstants.LEADING);
		btnC.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnC.setBackground(white);
		btnC.setBounds(178, 190, 45, 45);
		contentPane.add(btnC);
		
		btnV = new JButton("V");
		btnV.setVerticalAlignment(SwingConstants.TOP);
		btnV.setHorizontalAlignment(SwingConstants.LEADING);
		btnV.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnV.setBackground(white);
		btnV.setBounds(250, 190, 45, 45);
		contentPane.add(btnV);
		
		btnB = new JButton("B");
		btnB.setVerticalAlignment(SwingConstants.TOP);
		btnB.setHorizontalAlignment(SwingConstants.LEADING);
		btnB.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnB.setBackground(white);
		btnB.setBounds(315, 190, 45, 45);
		contentPane.add(btnB);
		
		btnN = new JButton("N");
		btnN.setVerticalAlignment(SwingConstants.TOP);
		btnN.setHorizontalAlignment(SwingConstants.LEADING);
		btnN.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnN.setBackground(white);
		btnN.setBounds(382, 190, 47, 45);
		contentPane.add(btnN);
		
		btnM = new JButton("M");
		btnM.setVerticalAlignment(SwingConstants.TOP);
		btnM.setHorizontalAlignment(SwingConstants.LEADING);
		btnM.setFont(new Font("Times New Roman", Font.PLAIN, 16));
		btnM.setBackground(white);
		btnM.setBounds(449, 190, 48, 45);
		contentPane.add(btnM);
		/**
		 * 创建面板panel置于面板contentPane中,设置面板panel的位置、宽高、TitledBorder、背景色以及布局方式(边界布局)
		 */
		JPanel panel = new JPanel();
		panel.setBorder(new TitledBorder(null, "文本显示区", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		panel.setBackground(Color.WHITE);
		panel.setBounds(0, 0, 540, 45);
		contentPane.add(panel);
		panel.setLayout(new BorderLayout(0, 0));
		
		
		/**
		 * 创建文本框textField置于面板panel的中间
		 */
		textField = new JTextField();
		textField.addKeyListener(new KeyAdapter() { //文本框添加键盘事件的监听
			char word;
			@Override
			public void keyPressed(KeyEvent e) { //按键被按下时被触发
				word=e.getKeyChar();//获取按下键表示的字符
				for(int i=0;i<btns.size();i++){//遍历存储按键ID的ArrayList集合
					//判断按键是否与遍历到的按键的文本相同
					if(String.valueOf(word).equalsIgnoreCase(btns.get(i).getText())){
						btns.get(i).setBackground(green);//将指定按键颜色设置为绿色
					}
				}
			}
			@Override
			public void keyReleased(KeyEvent e) { //按键被释放时被触发
				word=e.getKeyChar();//获取释放键表示的字符
				for(int i=0;i<btns.size();i++){//遍历存储按键ID的ArrayList集合
					//判断按键是否与遍历到的按键的文本相同
					if(String.valueOf(word).equalsIgnoreCase(btns.get(i).getText())){
						btns.get(i).setBackground(white);//将指定按键颜色设置为白色
					}
				}
			}
		});
		panel.add(textField, BorderLayout.CENTER);
		textField.setColumns(10);
	}
}

返回结果:

3.鼠标事件

所有组件都能应用鼠标事件,MouseEvent类负责捕获鼠标事件,可以通过为组件添加实现了MouseListener接口的监听器类来处理该组件触发的鼠标事件,

MouseListener接口共有5个抽象方法,分别在光标移入或移出组件、鼠标按键被按下或释放和发生单击事件时被触发,所谓单击事件,就是鼠标按键被按下并释放,需要注意的是,如果鼠标按键是在移出组件之后被释放,则不会触发单击事件,接口中各个方法的代码如下:

public void mouseReleased(MouseEvent e) {
    //鼠标按键被释放时被触发
}

public void mousePressed(MouseEvent e) {
	//鼠标按键被按下时被触发
}

public void mouseExited(MouseEvent e) {
	//光标移出组件时被触发	
}

public void mouseEntered(MouseEvent e) {
    //光标移入组件时被触发
}

public void mouseClicked(MouseEvent e) {
	//发生单击事件时被触发
}

在每个抽象方法中均转入了MouseEvent类的对象,MouseEvent类中比较常用的方法如下表:

方法功能简介
getSource()用来获得触发此事件的组件对象,返回值为Object类型
getButton()用来获得代表此次被按下、被释放或被单击的按键的int值
getClickCount()用来获得按键被单击的次数

当需要判断触发此次事件的鼠标按键时,可以通过比较由getButton()方法返回的int值和下表中的静态常量的方式获得:

静态常量常量值代表的键
BUTTON11代表鼠标左键
BUTTON22代表鼠标滚轮
BUTTON33代表鼠标右键

下面实例讲解鼠标事件,代码如下:

import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;


import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.LineBorder;

public class Demo extends JFrame{
	public Demo() {
		Container ct = getContentPane();
		setBounds(200, 200, 500, 300);
		ct.setLayout(null);
		//创建滚动面板
		JScrollPane jsc = new JScrollPane();
		jsc.setBounds(32, 27, 183, 216);
		ct.add(jsc);
		//创建文本域
		JTextArea jt = new JTextArea();
		jsc.setViewportView(jt);
		//创建标签
		JLabel jl = new JLabel();
		jl.setBounds(244, 57, 160, 141);
		jl.setBorder(new LineBorder(Color.red));
		ct.add(jl);
		//创建鼠标区域标签
		JLabel jl1 = new JLabel("鼠标点击区域");
		jl1.setBounds(281, 32, 84, 15);
		ct.add(jl1);
		//给鼠标区域标签创建鼠标事件
		jl.addMouseListener(new MouseListener() {
			//鼠标按键被释放时被触发
			public void mouseReleased(MouseEvent e) {
				jt.append("鼠标释放\n");
				
			}
			//鼠标按键被按下时被触发
			public void mousePressed(MouseEvent e) {
				jt.append("鼠标按下\n");
				
			}
			//光标移出组件时被触发
			public void mouseExited(MouseEvent e) {
				jt.append("光标移出\n");
				
			}
			//光标移入组件时被触发
			public void mouseEntered(MouseEvent e) {
				jt.append("光标移入\n");
			}
			//发生单击事件时被触发
			public void mouseClicked(MouseEvent e) {
				int sum = e.getClickCount();
				int i = e.getButton(); // 通过该值可以判断按下的是哪个键
				if (i == MouseEvent.BUTTON1)
					jt.append("按下的是鼠标左键\n");
				else if (i == MouseEvent.BUTTON2)
					jt.append("按下的是鼠标滚轮\n");
				else if (i == MouseEvent.BUTTON3)
					jt.append("按下的是鼠标右键\n");
				
				jt.append("鼠标单击" + sum + "次\n");
				
			}
		});
		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		new Demo();
	}
}

返回结果:

4.窗体事件

需要捕获与窗体有关的事件时(如捕获窗体被打开、将要被关闭、已经被关闭事件),可以通过实现了WindowListener接口的事件监听器完成,WindowListener接口中各个方法的代码如下:

	
		public void windowActivated(WindowEvent e) {
	        // 窗体被激活时触发
		}

		public void windowOpened(WindowEvent e) {
            // 窗体被打开时触发
		}

		public void windowIconified(WindowEvent e) {
	        // 窗体被最小化时触发
		}

		public void windowDeiconified(WindowEvent e) {
	        // 窗体被非最小化时触发
		}

		public void windowClosing(WindowEvent e) {
            // 窗体将要被关闭时触发
		}

		public void windowDeactivated(WindowEvent e) {
            // 窗体不再处于激活状态时触发
		}

		public void windowClosed(WindowEvent e) {
	        // 窗体已经被关闭时触发
		}

窗体激活事件和窗体获得焦点事件的区别如下:

  1. 窗体激活事件时WindowListener接口中提供的事件,而窗体获得焦点事件是WindowFocusListener接口中提供的;
  2. 执行顺序不同:窗体激活→获得焦点→失去焦点→窗体不处于被激活状态;

通过捕获窗体将要被关闭事件,可以执行一些相关的操作,例如,窗体将要被关闭时,询问是否保存未保存的设置或者弹出确认关闭对话框等,下面是一个用来演示捕获窗体事件的典型实例:


import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import java.awt.event.WindowListener;

import javax.swing.JFrame;

public class Dpc extends JFrame {

	public static void main(String args[]) {
		Dpc frame = new Dpc();
		frame.setVisible(true);
	}

	public Dpc() {
		super();
		addWindowListener(new MyWindowListener());// 为窗体添加其他事件监听器
		setTitle("捕获其他窗体事件");
		setBounds(100, 100, 500, 375);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	}

	private class MyWindowListener implements WindowListener {
		public void windowActivated(WindowEvent e) {// 窗体被激活时触发
			System.out.println("窗口被激活!");
		}

		public void windowOpened(WindowEvent e) {// 窗体被打开时触发
			System.out.println("窗口被打开!");
		}

		public void windowIconified(WindowEvent e) {// 窗体被最小化时触发
			System.out.println("窗口被最小化!");
		}

		public void windowDeiconified(WindowEvent e) {// 窗体被非最小化时触发
			System.out.println("窗口被非最小化!");
		}

		public void windowClosing(WindowEvent e) {// 窗体将要被关闭时触发
			System.out.println("窗口将要被关闭!");
		}

		// 窗体不再处于激活状态时触发
		public void windowDeactivated(WindowEvent e) {
			System.out.println("窗口不再处于激活状态!");
		}

		public void windowClosed(WindowEvent e) {// 窗体已经被关闭时触发
			System.out.println("窗口已经被关闭!");
		}
	}
}

返回结果:

 

  • 22
    点赞
  • 169
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值