本帖最后由 王婷婷 于 2013-5-16 15:43 编辑
创建一个Frame窗口,选择合适的布局管理器,并向容器中添加按钮组件。这时,我们实现的只是将窗口最小化、最大化,当点击关闭、按钮时,窗体并没有反应。也就是说,界面中的组件并没有实现和用户交互的功能。
- public static void main(String[] args) {
- //创建frame对象并初始化(带有标题和边框的窗口)
- Frame f = new Frame("我的第一个Frame窗口");
- //一般是横坐标 纵坐标
- f.setSize(500,400);
- //与左边界的距离,与上边界的距离
- f.setLocation(500,100);
- Button b = new Button("退出");
- f.add(b);
- f.setLayout(new FlowLayout());
- f.setVisible(true);
- }
复制代码1、事件监听机制 (1)事件源:AWT/Swing包中的图形界面组件。 (2)事件:事件源所具备的对应事件和共性事件,是发生在界面上的用户交互行为。是系统对其可能处于的某种状态或某种操作的预先定义。比如,Frame中的关闭窗口。 事件一般分为三种类型:键盘事件、鼠标事件、以及组件的动作事件。 Java定义了许多事件类,来描述不同的用户行为。事件发生时,生成一个事件对象。 事件对象描述的是用户所执行的操作。 (3)监听器:用于接收的事件。 (4)事件处理方式:事件发生所采取的处理方式。事件的处理由事件处理程序完 成。每个AW组件都有自己的事件处理程序。当事件对象生成时,AWT事件处理系统就会将这个事件对象传递给所涉及的组件,由它们的事件处理程序进行相应处理。 在JDK中,将事件源和对事件的处理分开,这样就可以将界面和事件分离,将这些功能封装成类、接口或方法等,有利于提高代码的复用性。 对于事件源上发生的事件的处理代码就在这里。如: f.addWindowListener(new WindowAdapter(){}); but.addActionListener(new ActionListener(){}); 这里,调用组件的addWindowListener()、addActionListener()方法,将事件的监听器注册到GUI组件上。WindowAdapter、ActionListener是接口,接口中定义了窗体和Action事件的抽象方法,让其子类具体实现这些方法,并在方法体中自定义处理的代码。 2、窗体和Action事件 在上面的例子中,事件就是Frame窗体及其中的组件应该具有哪些与用户交互的操作动作(比如要关闭窗口或点击按钮希望出现什么回应等),事件源就是Frame窗体,监听器就是Frame类下的window类的addWindowListener()方法,其中接收的就是WindowAdapter接口的子类对象,WindowAdapter接口中有对应的方法用于对窗口所发生的事件作出处理。按钮的监听器是addActionListener()。 - import java.awt.*;
- import java.awt.event.*;
- class FrameDemo {
- //定义该图形中所需的组件的引用
- private Frame f;
- private Button but;
- FrameDemo(){
- //调用niit初始化方法,
- init();
- }
- //定义初始化方法,用于设置窗体的属性等操作
- public void init(){
- //图形化界面初始化 创建组件对象
- f = new Frame("Frame窗口");
- //对frame进行基本设置 intx,inty 宽,高
- f.setBounds(300,100,500,400);
- //不设置默认填充整个frame
- f.setLayout(new FlowLayout());
-
- //初始化按钮组件
- but = new Button("按钮");
- //将组件添加到frame中
- f.add(but);
- //调用事件方法
- myEvent();
- //设置窗体为可见
- f.setVisible(true);
- }
- //自定义事件方法
- public void myEvent() {
- //添加frame窗体监听事件
- //当接口中的方法超过3个,则需使用适配器
- f.addWindowListener(new WindowAdapter() {
- //复写WindowAdapter接口中的windowClosing方法,并接收事件对象
- public void windowClosing(WindowEvent e) {
- //自定义处理代码
- System.out.println("关闭窗口");
- //用于退出窗体
- System.exit(0);
- }
- }
- );
- //添加Button监听事件(点击按钮,窗体会退出)
- but.addActionListener(new ActionListener(){
- //复写ActionListener接口中的actionPerformed方法,
- public void actionPerformed(ActionEvent e) {
- //自定义处理方式
- System.out.println("点我,奇迹就会出现");
- System.exit(0);
- }
- }
- );
- }
- public static void main(String[] args) {
- //创建对象
- //FrameDemo fd =
- new FrameDemo();
- }
- }
复制代码3、鼠标事件 在图形用户界面中,我们可以单击或双击文件来完成一些操作。如,单击文件出现菜单,双击文件打开文件等。在一些网站上,当鼠标经过一些文字或图片时,也会做出一些回应,要么出现阴影,要么出现说明文字等。 这里则在窗体中的按钮(Button)组件上添加一些事件,用于实现单击、双击、鼠标经过时的交互情况。当双击鼠标时,经过按钮的单击这两个动作会先于双击执行,当双击完后,单击动作也会触发。 - import java.awt.*;
- import java.awt.event.*;
- //定义一个类,用于封装实现鼠标事件的功能
- class MouseEventDemo {
- private Frame f;
- private Button but;
- MouseEventDemo() {
- init();
- }
- public void init() {
- f = new Frame("My Frame");
- f.setBounds(300,100,500,400);
- f.setLayout(new FlowLayout());
-
- but = new Button("我的按钮");
- f.add(but);
-
- myEvent();
- f.setVisible(true);
- }
- public void myEvent(){
- //添加窗体事件
- f.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- System.out.println("关闭窗口动作");
- System.exit(0);
- }
- });
-
- //添加按钮事件,按钮是当前事件源
- but.addActionListener(new ActionListener(){
- public void actionPerformed(ActionEvent e){
- System.out.println("点击动作");
- }
- });
-
- //添加鼠标事件
- //接收MouseAdapter接口的子类对象
- but.addMouseListener(new MouseAdapter() {
- //定义一个当鼠标经过和点击时的计数变量,
- private int count = 1;
- private int clickCount = 1;
- //复写接口中的mouseClicked方法
- public void mouseClicked(MouseEvent e){
- //当鼠标被点击2下时,clickCount自增,并打印,测试
- if (e.getClickCount()==2) {
- System.out.println("双击我"+clickCount++);
- }
- }
- //复写mouseEntered方法
- public void mouseEntered(MouseEvent e){
- System.out.println("飘过"+count++);
- }
- });
- }
- public static void main(String[] args) {
- new MouseEventDemo();
- }
- }
复制代码
|