一、WindowListener
- 用于接收窗口事件的侦听器接口。
- 旨在处理窗口事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 WindowAdapter(仅重写所需的方法)。
- 然后使用窗口的 addWindowListener 方法将从该类所创建的侦听器对象向该 Window 注册。
- 当通过打开、关闭、激活或停用、图标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,并将 WindowEvent 传递给该方法。
public interface WindowListener extends EventListener
{
//用户试图从窗口的系统菜单中关闭窗口时调用
void windowClosing(WindowEvent e);
//窗口首次变为可见时调用
void windowOpened(WindowEvent e);
//将 Window 设置为活动 Window 时调用
void windowActivated(WindowEvent e);
}
二、WindowAdapter
- 接收窗口事件的抽象适配器类。
- 此类中的方法为空。此类存在的目的是方便创建侦听器对象。
public abstract class WindowAdapter implements WindowListener, WindowStateListener, WindowFocusListener
{
//.........
}
三、ActionListener
- 用于接收操作事件的侦听器接口。
- 对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的 addActionListener 方法向该组件注册。
- 在发生操作事件时,调用该对象的 actionPerformed 方法。
public interface ActionListener extends EventListener
{
//发生操作时调用。就一个方法无需适配器
void actionPerformed(ActionEvent e);
}
四、MouseListener
- 用于接收组件上“感兴趣”的鼠标事件(按下、释放、单击、进入或离开)的侦听器接口。
- 旨在处理鼠标事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 MouseAdapter(仅重写所需的方法)。
- 然后使用组件的 addMouseListener 方法将从该类所创建的侦听器对象向该组件注册。
- 当按下、释放或单击(按下并释放)鼠标时会生成鼠标事件。
- 鼠标光标进入或离开组件时也会生成鼠标事件。
- 发生鼠标事件时,将调用该侦听器对象中的相应方法,并将 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
- 用于接收键盘事件(击键)的侦听器接口。
- 旨在处理键盘事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象 KeyAdapter 类(仅重写有用的方法)。
- 然后使用组件的 addKeyListener 方法将从该类所创建的侦听器对象向该组件注册。
- 按下、释放或键入键时生成键盘事件。
- 然后调用侦听器对象中的相关方法并将该 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("保存失败");
}
}
});
}
}