`

29、java.awt.event-事件 监听器

阅读更多

一、WindowListener

 

  1. 用于接收窗口事件的侦听器接口。
  2. 旨在处理窗口事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 WindowAdapter(仅重写所需的方法)。
  3. 然后使用窗口的 addWindowListener 方法将从该类所创建的侦听器对象向该 Window 注册。
  4. 当通过打开、关闭、激活或停用、图标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,并将 WindowEvent 传递给该方法。 
public interface WindowListener extends EventListener
{
	//用户试图从窗口的系统菜单中关闭窗口时调用
	void windowClosing(WindowEvent e);

	//窗口首次变为可见时调用
	void windowOpened(WindowEvent e);

	//将 Window 设置为活动 Window 时调用
	void windowActivated(WindowEvent e);
}

 

二、WindowAdapter

 

  1. 接收窗口事件的抽象适配器类。
  2. 此类中的方法为空。此类存在的目的是方便创建侦听器对象。
public abstract class WindowAdapter implements WindowListener, WindowStateListener, WindowFocusListener
{
	//.........
}

 

三、ActionListener

 

  1. 用于接收操作事件的侦听器接口。
  2. 对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的 addActionListener 方法向该组件注册。
  3. 在发生操作事件时,调用该对象的 actionPerformed 方法。 
public interface ActionListener extends EventListener
{
	//发生操作时调用。就一个方法无需适配器
	void actionPerformed(ActionEvent e);
}

 

四、MouseListener

 

  1. 用于接收组件上“感兴趣”的鼠标事件(按下、释放、单击、进入或离开)的侦听器接口。
  2. 旨在处理鼠标事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 MouseAdapter(仅重写所需的方法)。 
  3. 然后使用组件的 addMouseListener 方法将从该类所创建的侦听器对象向该组件注册。
  4. 当按下、释放或单击(按下并释放)鼠标时会生成鼠标事件。
  5. 鼠标光标进入或离开组件时也会生成鼠标事件。
  6. 发生鼠标事件时,将调用该侦听器对象中的相应方法,并将 MouseEvent 传递给该方法。 
public interface MouseListener extends EventListener
{
	//鼠标按键在组件上单击(按下并释放)时调用
	void mouseClicked(MouseEvent e);

	//鼠标进入到组件上时调用
	void mouseEntered(MouseEvent e);

	//鼠标按键在组件上按下时调用
	void mousePressed(MouseEvent e);

	//鼠标按钮在组件上释放时调用。
	void mouseReleased(MouseEvent e);

	//鼠标离开组件时调用。
	void mouseExited(MouseEvent e);
}

 

五、KeyListener

 

 

  1. 用于接收键盘事件(击键)的侦听器接口。
  2. 旨在处理键盘事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象 KeyAdapter 类(仅重写有用的方法)。
  3. 然后使用组件的 addKeyListener 方法将从该类所创建的侦听器对象向该组件注册。
  4. 按下、释放或键入键时生成键盘事件。
  5. 然后调用侦听器对象中的相关方法并将该 KeyEvent 传递给它

 

 

public interface KeyListener extends EventListener
{
	//键入某个键时调用此方法。
	void keyTyped(KeyEvent e);

	//按下某个键时调用此方法
	void keyPressed(KeyEvent e);

	//释放某个键时调用此方法。
	void keyReleased(KeyEvent e);
}

 

 

六、事件

 

 

 

 

/**
 *MouseEvent
 *指示组件中发生鼠标动作的事件
 */
public class MouseEvent extends InputEvent
{
	//鼠标点击次数
	public static final int MOUSE_CLICKED;
}

 

/**
 *KeyEvent
 *表示组件中发生键击的事件
 */
public class KeyEvent extends InputEvent
{
	//返回与此事件中的键关联的字符。
	public char getKeyChar(){}

	//返回与此事件中的键关联的整数 keyCode
	public int getKeyCode(){}

	//返回描述 keyCode 的 String,如 "HOME"、"F1" 或 "A"。
	public static String getKeyText(int keyCode){}
}

 

/**
 *InputEvent
 *所有组件级别输入事件的根事件类
 */
public abstract class InputEvent extends ComponentEvent
{
	//使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件
	public void consume(){}

	//返回 Alt 修饰符在此事件上是否为 down
	public boolean isAltDown(){}

	//返回 Control 修饰符在此事件上是为 down
	public boolean isControlDown(){}

	//返回 Shift 修饰符在此事件上是否为 down
	public boolean isShiftDown(){}
}

 

 

七、示例

 

package day17;

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

public class AwtTest {

	public static void main(String[] args) {
		MyFrame frame = new MyFrame("My Frame");
	}
}
class MyFrame
{
	private Frame frame = new Frame();
	private Button but;
	private TextField text;
	MyFrame(String title)
	{
		frame.setTitle(title);
		init();
	}
	private void init()
	{
		but = new Button("退出");
		text = new TextField(40);
		
		frame.setSize(400,500);
		frame.setLocation(200, 300);
		
		frame.add(but);
		frame.add(text);
		
		frame.setLayout(new FlowLayout());
		frame.setVisible(true);
		frame.setResizable(false);
		myEvent();
	}
	private void myEvent() 
	{
		frame.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		but.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				//
			}
		});
		but.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent e)
			{
				if(e.getClickCount()==2)
					System.out.println("双击");
				else
					System.out.println("单击");
			}
		});
		text.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e)
			{
//				在文本框中输入回车键,程序结束
//				if(e.getKeyCode()==KeyEvent.VK_ENTER)
//					System.exit(0);
				
//				实现组合键
//				if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)
//					System.out.println("ctrl+enter");
			
//				System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"--"+e.getKeyCode());
				
				//只能输入小键盘上的数字
				int code = e.getKeyCode();
				if(!(code >= KeyEvent.VK_NUMPAD0 && code <= KeyEvent.VK_NUMPAD9))
					e.consume();
			}
		});
	}
}

 

 

package day17;

import java.awt.*;
import java.awt.event.*;
import java.io.File;

/**
 * 需求:列出指定目录下的所有文件
 */
public class AwtTest {

	public static void main(String[] args) {
		MyFrame frame = new MyFrame("My Frame");
	}
}
class MyFrame
{
	private Frame frame = new Frame();
	private Button but,but2;
	private TextField text;
	private TextArea ta;
	private Dialog dia;
	MyFrame(String title)
	{
		frame.setTitle(title);
		init();
	}
	private void init()
	{
		but = new Button("转到");
		text = new TextField(60);
		ta = new TextArea(25,70);
		dia = new Dialog(frame,"提示信息:错误",true);
		but2 = new Button("确定");
		
		dia.setBounds(400,200,240,150);
		dia.add(but2);
		dia.setLayout(new FlowLayout());
		
		frame.setBounds(300, 100, 600, 500);
		
		frame.add(but);
		frame.add(text,0);
		frame.add(ta);
		
		frame.setLayout(new FlowLayout());
		frame.setVisible(true);
		frame.setResizable(false);
		myEvent();
	}
	private void myEvent() 
	{
		frame.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		but.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent e)
			{
				String dirPath = text.getText();
				File dir = new File(dirPath);
				if(dir.exists() && dir.isDirectory())
				{
					ta.setText("");
					String[] names = dir.list();
					for(String name : names)
						ta.append(name+"\r\n");
				}
				else
				{
					dia.setVisible(true);
				}
			}
		});
		but2.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent e)
			{
				dia.setVisible(false);
			}
		});
	}
}

 

package day17;

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

/**
 * 需求:模拟记事本
 */
public class AwtTest {

	public static void main(String[] args) {
		MyFrame frame = new MyFrame("测试");
	}
}
class MyFrame
{
	private Frame frame = new Frame();
	private MenuBar bar;
	private Menu files;
	private MenuItem open,close,save;
	private FileDialog openDial;
	private FileDialog saveDial;
	private TextArea ta;
	private File file;
	MyFrame(String title)
	{
		frame.setTitle(title);
		init();
	}
	private void init()
	{	
		ta = new TextArea();
		bar = new MenuBar();
		files = new Menu("文件");
		open = new MenuItem("打开");
		close = new MenuItem("关闭");
		save = new MenuItem("保存");
		openDial = new FileDialog(frame,"我要打开",FileDialog.LOAD);
		saveDial = new FileDialog(frame,"我要保存",FileDialog.SAVE);
		
		files.add(open);
		files.add(save);
		files.add(close);
		frame.add(ta);
		bar.add(files);
		frame.setMenuBar(bar);
		
		frame.setBounds(300, 100, 500, 600);
		frame.setVisible(true);
		myEvent();
	}
	private void myEvent() 
	{
		frame.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		//打开文件
		open.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				openDial.setVisible(true);
				String dir = openDial.getDirectory();
				String name = openDial.getFile();
				if(dir==null || name==null)
					return;
				ta.setText("");
				file = new File(dir,name);
				try {
					BufferedReader br = new BufferedReader(new FileReader(file));
					String line = null;
					while((line=br.readLine())!=null)
					{
						ta.append(line+"\r\n");
					}
					br.close();
				} catch (IOException e) {
					System.out.println("打开文件失败");
				}
			}
		});
		//保存文件
		save.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				if(file==null)
				{
					saveDial.setVisible(true);
					String dir = saveDial.getDirectory();
					String name = saveDial.getFile();
					if(dir==null || name==null)
						return;
					file = new File(dir,name);
				}
				try {
					BufferedWriter bw = new BufferedWriter(new FileWriter(file));
					String content = ta.getText();
					bw.write(content);
					bw.flush();
					bw.close();
				} catch (IOException e) {
					System.out.println("保存失败");
				}
			}
		});
	}
}

 

分享到:
评论

相关推荐

    java事件监听器

    当你将一个类用作事件监听器时,你已经设置好一个特定的事件类型,它会用该类进行监听。接下来的操作是:一个匹配的监听器必须被加入到该组件中 组件被创建之后,可以在组件上调用如下方法来将监听器与它联系起来 ...

    Java计算器实验报告(1).doc

    问题需求描述:Problem description 利用Java Swing设计计算器图形化界面,并实现事件的监听,以及计算器基本的加、减、乘、除、 清空、输出运算结果的操作,学习使用各种图形化界面的控件,容器,布局等,学习对 ...

    多线程排号系统课程设计

    import java.awt.event.ActionEvent;//动作事件 import java.awt.event.ActionListener;//事件监听接口 import javax.swing.*; import com.briup.net.WebServerNet; public class WebServerFrame extends JFrame ...

    仿QQ登录窗体,拉伸展开!

    MouseAdapter mouseAdapter = new MouseAdapter() {// 创建鼠标事件监听器 private Rectangle sourceRec;// 创建矩形对象 @Override public void mouseEntered(MouseEvent e) { JButton button = (JButton) ...

    login.java

    import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Iterator; import javax.swing.ImageIcon; import javax.swing.JButton; import javax....

    java实验报告.doc

    //加载图形界面设计要用的抽象窗口工具包 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Test2 extends Applet implements ActionListener { Label prompt1,prompt2;//...

    小型图书管理系统java课程设计.doc

    //注册事件监听器 j2.addActionListener(this); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); } public void confirm()//验证用户和密码是否存在 {...

    java模拟科学计算器课程设计.doc

    " "4.2总体设计 " "4.2.1 包的描述 " "本程序导入了 " "java.awt.BorderLayout包, " "java.awt.Color包, " "java.awt.GridLayout包, " "java.awt.event.ActionEvent包, " "java.awt.event.ActionListener包, ...

    JAVA中的图形用户界面示例

    import java.awt.event.*; public class MouseAndKeyDemo extends JApplet { protected int lastX = 0, lastY = 0; public void init() { setBackground(Color.white); setForeground(Color.blue); ...

    java模拟科学计算器课程设计(1).doc

    " "4.2总体设计 " "4.2.1 包的描述 " "本程序导入了 " "java.awt.BorderLayout包, " "java.awt.Color包, " "java.awt.GridLayout包, " "java.awt.event.ActionEvent包, " "java.awt.event.ActionListener包, ...

    JAVA课程设计淘宝管理系统.doc

    设计思路:向 Frame 中添加容器,在 north 中添加文本框,center 中添加面板, 面板设为 gridlayout 布局,然后添加按纽,设置监听器,设置事件和响应。 五、程序源代码(详细设计) import java.awt.*; import ...

    Java2游戏编程.pdf

    中文名: Java2游戏编程 原名: Java 2 Game Programming 作者: Thomas Petchel译者: 晏利斌 孙淑敏 邵荣 资源格式: PDF 版本: 扫描版 出版社: 清华大学出版社书号: 7302112932发行时间: 2005年08月 地区: 大陆 语言: ...

    上机实验-2 (1).doc

    import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.StringTokenizer; //导入 public class Test1 extends JFrame {//继承JFrame private final JPanel contentPane;//私有类...

    数据库实验完整版 通讯录

    import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.*; public class addWind implements ...

    java计算器程序.doc

    import java.awt.event.*; import java.awt.*; //需要解决的问题,数学的运算都有正负号的出现,在点击等号的时候就会有冲突,应该怎样解决,经验:双精度浮点型数据类型是会像后减一位。0.7会显示成0.69999999 ...

    贪吃蛇java课程设计--贪吃蛇程序设计.doc

    " "import java.awt.event.*; " "import javax.swing.*; " "import java.util.*; " "public class GreedSnake implements KeyListener " "{ " "JFrame mainFrame; " "Canvas paintCanvas; " "JLabel labelScore; " ...

    Java NIO 聊天室 JSwing

    import java.awt.event.*; import javax.swing.*; public class ServerBootFrame extends JFrame { /** * */ private static final long serialVersionUID = 1L; JPanel jp = new JPanel(new ...

    JAVA实验通讯录-实验报告.pdf

    区分他们的方法同样是根据按钮标题的不同来区分,当 鼠标单击列表组件时,显示不同人员的联系信息,所以需要为列表组件添加鼠 标事件监听器。 算法分析 在实现功能时只用了简单的面向对象的设计方法,在处理多个按钮...

    SpiderCardGame-java

    import java.awt.event.*; import javax.swing.*; import java.util.*; public class Spider extends JFrame{ //整型变量,表示难度等级为:简单 public static final int EASY = 1; //整型变量,表示难度...

    多媒体处理其中有多个多媒体的作用技术处理

    import java.awt.event.*; import java.net.*; // 声音播放程序 public class AudioPlayDemo extends JFrame implements ActionListener, ItemListener { boolean looping = false; //是否循环播放 String[] ...

Global site tag (gtag.js) - Google Analytics