Java深入学习图形用户界面GUI之事件处理

Swing组件中的事件处理专门用于响应用户的操作,例如,响应用户的鼠标单击、按下键盘等操作。在Swing事件处理的过程中,主要涉及三类对象:

1、事件源:事件发生的场所,通常是产生事件的组件,如窗口、按钮、菜单等。

2、事件对象:封装了GUI组件上发生的特定事件(通常就是用户的一次操作)。

3、监听器:负责监听事件源上发生的事件,并对各种事件做出相应处理(监听器对象中包含事件处理器)。

实现Swing事件处理的主要步骤如下:

1、创建事件源:除了一些常见的按钮、键盘等组件可以作为事件源外,还可以使用JFrame窗口在内的顶级容器作为事件源。

2、自定义事件监听器:根据要监听的事件源创建指定类型的监听器进行事件处理。监听器是一个特殊的java类,必须实现XxxListener接口。根据组件触发的动作进行区分,例如,WindowListener用于监听窗口事件,ActionListener用于监听动作事件。

3、为事件源注册监听器:使用addXxxListener()方法为指定事件源添加特定类型的监听器。当事件源上发生监听事件后,就会触发绑定的事件监听器,由监听器中的方法对事件进行相应处理。

Swing常用事件处理有:窗体事件、鼠标事件、键盘事件、动作事件等。本文主要针对鼠标事件实现一个登录、退出的窗体操作。

鼠标事件:

在图形用户界面中,用户会经常使用鼠标进行选择、切换界面等操作,这些操作被定义为鼠标事件,包括鼠标按下、鼠标松开、鼠标单击等。java提供了一个MouseEvent类描述鼠标事件。处理鼠标事件时,首先需要通过实现MouseListener接口定义监听器(也可以通过继承适配器MouseAdapter类定义监听器),然后调用addMouseListener()方法将监听器绑定到事件源对象。

鼠标事件案例一:通过实现MouseListener接口定义监听器来实现登录、退出操作

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class GUI_3事件处理 {
    public static void main(String[] args) {
        guitext1 gt=new guitext1();
    }
}
//创建一个鼠标监听类实现监听接口
class guitext1 implements MouseListener {
        JFrame jf;
        JPanel jp;
        JLabel l1,l2;
        JTextField f1,f2;
        JButton jb1,jb2;
        public guitext1() {
            jf = new JFrame("登录窗口");
            jf.setBounds(300, 200, 350, 300);
            jp = new JPanel();
            Font font = new Font("仿宋", Font.BOLD, 20);
            l1 = new JLabel("用户名:");
            l1.setFont(font);
            f1 = new JTextField("请输入用户名!",20);
            f1.setFont(font);
            l2 = new JLabel("密  码:");
            l2.setFont(font);
            f2 = new JTextField("请输入密码!",20);
            f2.setFont(font);
            jb1 = new JButton("登录");
            jb1.setFont(font);
            jb1.addMouseListener(this);//登录按钮注册监听器
            jb2 = new JButton("退出");
            jb2.setFont(font);
            jb2.addMouseListener(this);//退出按钮注册监听器
            jp.add(l1);
            jp.add(f1);
            jp.add(l2);
            jp.add(f2);
            jp.add(jb1);
            jp.add(jb2);
            jf.add(jp);
            jf.setVisible(true);
        }
        //这些方法可以不写,但是必须要创建
        @Override
        public void mousePressed(MouseEvent e) {
        }
        @Override
        public void mouseReleased(MouseEvent e) {
        }
        @Override
        public void mouseEntered(MouseEvent e) {
        }
        @Override
        public void mouseExited(MouseEvent e) {
        }
        //鼠标点击事件
        //mouseClicked==>在组件上单击(按下并释放)鼠标按钮时调用。
        @Override
        public void mouseClicked(MouseEvent e) {
            //getSource()==>得到事件源
            if(e.getSource().equals(jb1)) {
                if(f1.getText().equals("小明")&&f2.getText().equals("123456")) {
                    //showMessageDialog==>提供一个名为“消息”的信息消息对话框。
                    JOptionPane.showMessageDialog(null, "登录成功!");
                }else{
                    JOptionPane.showMessageDialog(null, "登录失败,请重新输入!");
                    //将文本清空
                    f1.setText(null);
                    f2.setText(null);
                }
            }//getSource()==>得到事件源
            if(e.getSource().equals(jb2)) {
                JOptionPane.showMessageDialog(null, "退出成功!");
                //关闭当前窗口
                //jf.dispose();
                //系统退出
                System.exit(0);
            }
        }
    }

案例二:通过继承适配器MouseAdapter类定义监听器来实现登录、退出操作

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class GUI_3事件处理2 {
        public static void main(String[] args) {
            guitext2 gt=new guitext2();
        }
    }
    class guitext2{
        JFrame jf;
        JPanel jp;
        JLabel l1,l2;
        JTextField f1,f2;
        JButton jb1,jb2;
        public guitext2() {
            jf = new JFrame("登录窗口");
            jf.setBounds(300, 200, 350, 300);
            jp = new JPanel();
            Font font = new Font("仿宋", Font.BOLD, 20);
            l1 = new JLabel("用户名:");
            l1.setFont(font);
            //输入用户名,JTextField==>允许编辑单行文本,显示原始字符
            f1 = new JTextField(null,20);
            f1.setFont(font);
            l2 = new JLabel("密  码:");
            l2.setFont(font);
            //f2 = new JTextField("请输入密码!",20);
            //JPasswordField是一个轻量级组件,允许编辑单行文本,其中视图指示输入的内容,但不显示原始字符。
            f2=new JPasswordField(null,20);
            f2.setFont(font);
            jb1 = new JButton("登录");
            jb1.setFont(font);
            //为按钮添加(注册)自定义鼠标监听事件监听器,并将f1,f2传入
            guitext2_1 gt=new guitext2_1(f1,f2);
            jb1.addMouseListener(gt);
            jb2 = new JButton("退出");
            jb2.setFont(font);
            jb2.addMouseListener(gt);
           // jb2.addMouseListener(new guitext2_1());//另一种写法
            jp.add(l1);
            jp.add(f1);
            jp.add(l2);
            jp.add(f2);
            jp.add(jb1);
            jp.add(jb2);
            jf.add(jp);
            jf.setVisible(true);
        }
    }
    //自定义一个鼠标监听类
//MouseAdapter==>用于接收鼠标事件的抽象适配器类
    class guitext2_1 extends MouseAdapter {
        //将f1,f2传入
        JTextField f1,f2;
        public guitext2_1(JTextField f1, JTextField f2) {
            this.f1 = f1;
            this.f2 = f2;
        }
        //mouseClicked==>在组件上单击(按下并释放)鼠标按钮时调用。
        public void mouseClicked(MouseEvent e) {
            //getSource()==>得到事件源
            JButton jButton=(JButton)e.getSource();
            if(jButton.getText().equals("登录")){
                if(f1.getText().equals("小明")&&f2.getText().equals("123456")) {
                    JOptionPane.showMessageDialog(null, "登录成功!");
                }else{
                    //showMessageDialog==>提供一个名为“消息”的信息消息对话框。
                    JOptionPane.showMessageDialog(null, "登录失败!");
                    //将文本清空
                    f1.setText(null);
                    f2.setText(null);
                }
            }
            if(jButton.getText().equals("退出")){
                JOptionPane.showMessageDialog(null, "退出成功!");
                //系统退出
                System.exit(0);
            }
        }
    }

案例三:内部类

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class GUI_3事件处理2 {
    public static void main(String[] args) {
        guitext2 gt=new guitext2();
    }
}
class guitext2{
    JFrame jf;
    JPanel jp;
    JLabel l1,l2;
    JTextField f1,f2;
    JButton jb1,jb2;
    public guitext2() {
        jf = new JFrame("登录窗口");
        jf.setBounds(300, 200, 350, 300);
        jp = new JPanel();
        Font font = new Font("仿宋", Font.BOLD, 20);
        l1 = new JLabel("用户名:");
        l1.setFont(font);
        //输入用户名,JTextField==>允许编辑单行文本,显示原始字符
        f1 = new JTextField(null,20);
        f1.setFont(font);
        l2 = new JLabel("密  码:");
        l2.setFont(font);
        //f2 = new JTextField("请输入密码!",20);
        //JPasswordField是一个轻量级组件,允许编辑单行文本,其中视图指示输入的内容,但不显示原始字符。
        f2=new JPasswordField(null,20);
        f2.setFont(font);
        jb1 = new JButton("登录");
        jb1.setFont(font);
        //为按钮添加(注册)自定义鼠标监听事件监听器
        guitext2_1 gt=new guitext2_1();
        jb1.addMouseListener(gt);
        jb2 = new JButton("退出");
        jb2.setFont(font);
        jb2.addMouseListener(gt);
        jb2.addMouseListener(new guitext2_1());//另一种写法
        jp.add(l1);
        jp.add(f1);
        jp.add(l2);
        jp.add(f2);
        jp.add(jb1);
        jp.add(jb2);
        jf.add(jp);
        jf.setVisible(true);
    }
 //内部类
//MouseAdapter==>用于接收鼠标事件的抽象适配器类
    class guitext2_1 extends MouseAdapter {
        //mouseClicked==>在组件上单击(按下并释放)鼠标按钮时调用。
        public void mouseClicked(MouseEvent e) {
            //getSource()==>得到事件源
            JButton jButton=(JButton)e.getSource();
            if(jButton.getText().equals("登录")){
                if(f1.getText().equals("小明")&&f2.getText().equals("123456")) {
                    JOptionPane.showMessageDialog(null, "登录成功!");
                }else{
                    //showMessageDialog==>提供一个名为“消息”的信息消息对话框。
                    JOptionPane.showMessageDialog(null, "登录失败!");
                    //将文本清空
                    f1.setText(null);
                    f2.setText(null);
                }
            }
            if(jButton.getText().equals("退出")){
                JOptionPane.showMessageDialog(null, "退出成功!");
                //系统退出
                System.exit(0);
            }
        }
    }
}

案例四:匿名内部类

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class GUI_3事件处理3 {
    public static void main(String[] args) {
        guitext3 gt=new guitext3();
    }
}
class guitext3{
    JFrame jf;
    JPanel jp;
    JLabel l1,l2;
    JTextField f1,f2;
    JButton jb1,jb2;
    public guitext3() {
        jf = new JFrame("登录窗口");
        jf.setBounds(300, 200, 350, 300);
        jp = new JPanel();
        Font font = new Font("仿宋", Font.BOLD, 20);
        l1 = new JLabel("用户名:");
        l1.setFont(font);
        //输入用户名,JTextField==>允许编辑单行文本,显示原始字符
        f1 = new JTextField(null,20);
        f1.setFont(font);
        l2 = new JLabel("密  码:");
        l2.setFont(font);
        //f2 = new JTextField("请输入密码!",20);
        //JPasswordField是一个轻量级组件,允许编辑单行文本,其中视图指示输入的内容,但不显示原始字符。
        f2=new JPasswordField(null,20);
        f2.setFont(font);
        jb1 = new JButton("登录");
        //匿名内部类
        jb1.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                if(f1.getText().equals("小明")&&f2.getText().equals("123456")) {
                    JOptionPane.showMessageDialog(null, "登录成功!");
                }else{
                    //showMessageDialog==>提供一个名为“消息”的信息消息对话框。
                    JOptionPane.showMessageDialog(null, "登录失败!");
                    //将文本清空
                    f1.setText(null);
                    f2.setText(null);
                }
            }
        });
        jb1.setFont(font);
        jb2 = new JButton("退出");
        //匿名内部类
        jb2.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                JOptionPane.showMessageDialog(null, "退出成功!");
                //系统退出
                System.exit(0);
            }
        });
        jb2.setFont(font);
        jp.add(l1);
        jp.add(f1);
        jp.add(l2);
        jp.add(f2);
        jp.add(jb1);
        jp.add(jb2);
        jf.add(jp);
        jf.setVisible(true);
    }
}

其实这些是由复杂的代码逐渐简化的过程。

我突然发现其中的JPanel还没有给大家解读过,所以在这里插入一下这个小知识:

JPanel面板组件是一个无边框且不能被移动、放大、缩小或者关闭的面板,它的默认布局管理器是FlowLayout。也可以使用JPanel带参数的构造函数JPanel(LayoutManager layout)或者setLayout()成员方法设置JPanel布局管理器。JPanel也被称为中间容器。

到此这篇关于Java深入学习图形用户界面GUI之事件处理的文章就介绍到这了,更多相关Java事件处理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于Java GUI 事件处理方式

    目录 事件处理主要涉及:事件源,事件,事件处理者 java.awt.event包中实现对事件处理的相关类和接口 从上例中可以看出编写事件处理可大致分为三步: 事件处理主要涉及:事件源,事件,事件处理者 在GUI中事件源是事件发生的场所,通常是各个组件,如被单击的按钮:事件是用户对界面的操作,如操作键盘是触发的键盘事件:而事件处理者则是对收到的事件经行处理的程序,也称监听器. java.awt.event包中实现对事件处理的相关类和接口 以Event结尾的类:事件类,如ActionEvent ,

  • Java深入学习图形用户界面GUI之事件处理

    Swing组件中的事件处理专门用于响应用户的操作,例如,响应用户的鼠标单击.按下键盘等操作.在Swing事件处理的过程中,主要涉及三类对象: 1.事件源:事件发生的场所,通常是产生事件的组件,如窗口.按钮.菜单等. 2.事件对象:封装了GUI组件上发生的特定事件(通常就是用户的一次操作). 3.监听器:负责监听事件源上发生的事件,并对各种事件做出相应处理(监听器对象中包含事件处理器). 实现Swing事件处理的主要步骤如下: 1.创建事件源:除了一些常见的按钮.键盘等组件可以作为事件源外,还可以

  • Java深入学习图形用户界面GUI之创建窗体

    GUI全程是Graphical User Interface,即图形用户界面.顾名思义,GUI就是可以让用户直接操作的图形化界面,包括窗口.菜单.按钮.工具栏和其他各种图形界面元素.目前,图形用户界面已经成为一种趋势,几乎所有的程序设计语言都提供了GUI设计功能. Java针对GUI设计提供了丰富的类库,这些类分别位于java.awt和javax.swing包中,简称为AWT和Swing.AWT引入了大量的Windows函数,因此称为中重量级组件.Swing是以AWT为基础构建起来的轻量级的图形

  • Java深入学习图形用户界面GUI之布局管理器

    布局管理器: 组件在容器中的位置和尺寸是由布局管理器决定的,每当需要重新调整屏幕大小时,都要用到布局管理器.Swing常用的布局管理器有4种,分别是FlowLayout(流式布局管理器).BorderLayout(边界布局管理器).GridLayout(网格布局管理器).GridBagLayout(网格包布局管理器).Swing容器在创建时都会使用一种默认的布局管理器,在程序中可以通过调用容器对象的setLayout()方法设置布局管理器,通过布局管理器可自动进行组件的布局管理. FlowLay

  • Java 入门图形用户界面设计之事件处理上

    Java程序设计 图形用户界面 [七]事件处理上 事件处理 事件和监听器 事件:表示一个对象发生状态变化 监听器:不断地监听事件的变化,并根据这些事件进行相应地处理 事件类 EventObject类 EventObject类的定义格式 public class EventObject extends Object implements Serializable{ public EventObject(Object source){ // 构造一个发生事件的对象 } public Object g

  • Java 入门图形用户界面设计之事件处理下

    Java程序设计 图形用户界面 [八]事件处理下 动作事件及监听处理 想让按钮变得有意义,就必须使用事件处理 使用ActionListener接口处理按钮的动作事件 方法 作用 void actionPerformed(ActionEvent e) 发生操作时调用 使用ActionListener监听 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.

  • php7 图形用户界面GUI 开发示例

    本文实例讲述了php7 图形用户界面GUI 开发.分享给大家供大家参考,具体如下: 一.下载指定系统扩展 http://pecl.php.net/package/ui http://pecl.php.net/package/ui/2.0.0/windows 由于我的系统是64位win10,php版本是7.1,所以选择7.1 Thread Safe (TS) x64,linux用户可以自行下载源码包,编译安装. 解压php_ui-2.0.0-7.1-ts-vc14-x64.zip,把php_ui.

  • Java图形用户界面设计(Swing)的介绍

    前言 Swing是一个用于开发Java应用程序用户界面的开发工具包.它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格.Swing开发人员只用很少的代码就可以利用Swing丰富.灵活的功能和模块化组件来创建优雅的用户界面. Swing 是一个为Java设计的GUI工具包. Swing是JAVA基础类的一部分. Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表. Swing提供许多比AWT更好的屏幕显示元素.它们用纯Java写成,所以同Java本

  • Python学习开发之图形用户界面详解

    目录 1. 丰富的图形开发界面库 1.1 tkinter 2 wxPython 概述 2.1 安装 wxPython 3 Jython 3.1 Jython 安装 3.2 在 Eclipese 中配置 Jython 4. 结语 1. 丰富的图形开发界面库 图形用户界面(Graphical User Interface,GUI),Python 提供了丰富的图形开发界面库(Python GUI): 1.1 tkinter tkinter 模块(TK接口)是 Python 的标准 TK GUI 工具包

  • 基于Python的GUI图形用户界面编程详细讲解

    目录 前言 常用的GUI库 1.Tkinter 2.wxPython 3.PyQT 基于tkinter模块创建GUI程序步骤 主窗口设置 主窗口位置和大小 GUI编程整体描述 常用组件汇总列表 GUI应用程序类的经典写法 总结 前言 在最早程序的设计中,程序和用户的交互都是通过控制台来完成的,而GUI(Graphics User Interface),即图形用户编程,是Python 所提供的一个丰富的组件,可以快速的实现使用图形界面和用户交互. 常用的GUI库 1.Tkinter tkinter

  • python 实现GUI(图形用户界面)编程详解

    Python支持多种图形界面的第三方库,包括: wxWidgets Qt GTK Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里.Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中. wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允

随机推荐