事件监听器代表负责处理事件的接口。Java 提供了各种事件监听器类,但我们将讨论更频繁使用的那些事件监听器类。一个事件监听器的每个方法有一个参数作为一个对象,该对象是 EventObject 类的子类。例如,鼠标事件监听器的方法将接受 MouseEvent 的实例,其中 MouseEvent 是 EventObject 派生的。
EventListner 接口
它是一个标记接口,每一个监听器接口必须扩展它。这个类定义在 java.util 包中。
事件: 当发生了某个事件的时候,就会有相应处理方案。
事件源 监听器 事件 处理方案
以前我们在frame添加的元素点击是无任何响应的,需要添加监听。
鼠标事件监听器
键盘事件监听器
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Demo05 {
static int count=0;
public static void main(String[] args) {
JFrame frame =new JFrame("窗体");
JPanel panel=new JPanel();
JLabel nameLable=new JLabel("用户名");
JTextField nameFiled =new JTextField(10);
panel.add(nameLable);
panel.add(nameFiled);
frame.add(panel);
nameFiled.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
System.out.println("按下的字符:"+e.getKeyChar());
System.out.println("获取键对应的数值:"+ e.getKeyCode());
}
});
Demo01.initJframe(frame, 300, 400);
}
}
事件监听器练习------记事本的保存实现
import java.awt.BorderLayout;
import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;
public class Demo04 {
JFrame frame =new JFrame("记事本");
JMenuBar bar =new JMenuBar();
JMenu file=new JMenu("文件");
JMenu open=new JMenu("保存");
JMenuItem saveOne=new JMenuItem("保存");
JTextArea area =new JTextArea(20, 30);
area.setLineWrap(true); //设置自动换行 public void initNotepad(){
file.add(saveOne);
bar.add(file);
saveOne.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
FileDialog fileDialog = new FileDialog(frame, "请选择保存的路径",FileDialog.SAVE);
fileDialog.setVisible(true);
//获取用户选择的路径与文件名
String path = fileDialog.getDirectory();
String fileName = fileDialog.getFile();
//创建一个输入对象
FileOutputStream fileOutputStream = new FileOutputStream(new File(path,fileName));
//获取文本域的内容,把内容写出
String content = area.getText();
fileOutputStream.write(content.getBytes());
//关闭资源
fileOutputStream.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
frame.add(bar,BorderLayout.NORTH);//设置自动换行
frame.add(area);
Demo01.initJframe(frame, 300, 400);
}
public static void main(String[] args) {
new Demo04().initNotepad();
}
}
效果图: