一、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("保存失败"); } } }); } }
相关推荐
当你将一个类用作事件监听器时,你已经设置好一个特定的事件类型,它会用该类进行监听。接下来的操作是:一个匹配的监听器必须被加入到该组件中 组件被创建之后,可以在组件上调用如下方法来将监听器与它联系起来 ...
java.awt.event包提供了事件类和监听器,用于处理用户交互。而java.awt.font和java.awt.geom则涉及2D图形和字体的相关API。 组件、容器和布局管理器是AWT的基础架构。容器可以包含多个组件,并且每个容器都可选择一...
- 事件处理:AWT中的EventListener和Event类用于处理用户的输入事件,如键盘按键,这在游戏中至关重要,因为玩家的控制输入需要被监听和响应。 - Timer类:贪吃蛇游戏通常会使用Timer类来控制游戏的帧率,实现定时...
事件处理是GUI编程的一个重要方面,Java通过事件监听器模式来实现这一点。在AWT中,所有事件类都定义在java.awt.event包中。当用户与界面组件交互时(如点击按钮),会产生一个事件对象,并由事件监听器来响应这个...
- `java.awt.event.ActionEvent` 和 `java.awt.event.ActionListener`: 事件处理机制中的动作事件及其监听器。 - `java.awt.event.KeyEvent` 和 `java.awt.event.KeyListener`: 键盘事件及其监听器。 - `java.util....
除了基本的事件处理方式,Java AWT还支持事件适配器(Event Adapter),它是一个已经实现了部分或全部监听器接口方法的抽象类。程序员可以通过继承适配器类并只重写需要的方法,来避免实现不必要的空方法。 此外,...
* 事件监听器:java.awt.event包中的事件监听器接口和实现类 * WindowAdapter类:java.awt.event.WindowAdapter类,用于处理窗口事件 * MouseListener接口:java.awt.event.MouseListener接口,用于处理鼠标事件 * ...
4. `javax.swing.event` - 事件和监听器类,处理Swing组件间的交互。 5. `javax.swing.filechooser` - 文件选择器的支持类。 6. `javax.swing.plaf` - 用户界面工厂(UI Factory),定义了UI行为的抽象类。 7. `...
在Java Event-Delegation Model中,事件的处理遵循一个明确的模式:事件的“源”(即触发事件的对象)负责创建事件,并将其分发给注册的事件监听器进行处理。这一过程涉及到了两个核心角色:**事件源(Event Source...
本文将详细介绍Java中事件监听器的四种实现方式:自身类作为事件监听器、外部类作为事件监听器、匿名内部类作为事件监听器以及内部类作为事件监听器。 #### 一、自身类作为事件监听器 自身类作为事件监听器是最...
// 添加事件监听器 addButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { double num1 = Double.parseDouble(inputField1.getText()); double num2 = Double....
- `java.awt.event.*`: AWT中的事件处理机制。 - `java.text.*`: 格式化文本。 - `java.util.*`: Java集合框架。 - `java.awt.datatransfer.*`: 数据传输接口,用于复制粘贴等功能。 - `java.awt.print.*`: 打印相关...
在Java中,我们可以利用`java.awt.event.KeyEvent`和`java.awt.Robot`类来捕获和处理这些键盘事件。不过,这种方法存在局限性,因为可能与其他键盘输入冲突,且无法区分输入是否来自扫描枪。 更专业的方法是使用第...
`javaspecialists-awt-event-mixins`项目旨在提供一种优雅的方式来管理组件的事件监听器,通过使用混入(mixin)设计模式来增强代码的可读性和可维护性。 混入是一种面向对象的设计模式,它允许一个类(对象)获得...
- 实现了鼠标事件监听器,以便响应用户的绘图操作。 - 在`mouseDragged`方法中处理鼠标拖动时的绘图逻辑。 - 使用`Graphics`或`Graphics2D`对象进行实际的绘图工作。 #### 四、绘图逻辑详解 1. **初始化坐标**...
AWT中的软件包包括java.awt基本组件实用工具、java.awt.accessibility辅助技术、java.awt.color颜色和颜色空间、java.awt.datatransfer支持剪贴板和数据传输、java.awt.dnd支持拖放、java.awt.event事件类和监听器、...
常见的事件监听器有ActionListener、MouseListener和KeyListener等。 最后,布局管理是GUI设计中的另一大主题。Java提供了FlowLayout、BorderLayout、GridLayout、GridBagLayout以及BoxLayout等多种布局管理器,...
包括java.awt.Button和java.awt.Frame用于创建窗口和按钮,java.awt.GridLayout用于布局,以及java.awt.event.ActionEvent和java.awt.event.ActionListener用于处理事件。 接下来,定义了ActionListener接口的实现...