Java——Swing界面,接口和事件

来源:互联网 发布:铃声截取软件 编辑:程序博客网 时间:2024/04/29 16:00

接口

为什么要使用接口?

我们都知道,在Java中,可以使用类的继承来简洁的完成拥有定义相同属性、相似方法类的操作。但是类的继承面临一个问题,一个子类无法继承自多个父类,所以引入接口概念。一个类可以实现多个接口,接口弥补了类的不能多继承缺点,继承和接口的双重设计既保持了类的数据安全也变相实现了多继承。

接口的定义

  • 接口其实就是一种特殊的类,定义接口的关键字:interface
  • 格式:
public interface 接口  extends 接口,... {     //定义常量   注意:Java提倡的常量名全部大写            public static final 数据类型  常量名  = 值;     //定义抽象方法public abstract 返回值类型  方法名(数据类型 参数名,...)}

接口中只能定义常量和抽象方法!

  • 注意:
    • 1.接口只有一个访问修饰符public。
    • 2.接口默认会提供public、static、final、abstract关键字。(即可以省略不写)
    • 3.接口是不允许实例化对象的。(只能定义常量和抽象方法,没有构造方法)

接口的实现

  • 实现接口的关键字:implements
  • 格式:
public class 类名 extends 类名  implements 接口,... {//类必须要实现接口中所有的抽象方法(包括接口的父接口中的抽象方法)}

显而易见接口是一种特殊的类,我们定义类实现接口实际就是类继承了接口,所以接口是用来丰富类的继承关系。

事件机制

事件源对象

  1. 有哪些内容可以成为事件源对象?
    所有的容器组件和元素组件都可以成为事件源对象。
  2. 如何确定谁是事件源对象?
    你的动作发生在哪一个组件上,那么该组件就是事件源对象。

事件监听方法

  • 事件源对象.addActionListener(ActionListener l);
  • 动作事件监听方法,这个方法会捕获按钮上的鼠标点击动作和输入框中的回车键动作;如果有这样的动作方法,此方法会捕获动作,交给ActionListener参数对象进行处理,对象会调用对应的方法,执行方法中的代码。

事件接口

ActionListener 动作事件接口
actionPerformed(ActionEvent e)动作事件的处理方法
接口是不能实例化对象,所必须要定义类实现这个接口,实现(重写)接口中的抽象方法。

Swing界面

关于图形界面

首先,Java中存在大量的图形界面源代码根据它们所储存的包名称不同,大体可以分为:

AWT组件

  • 这些类是位于java.awt包下
  • AWT组件是依赖于操作系统的绘图机制实现的,这样不同平台上
    就需要不同的一套代码实现(Java语言实现的)。AWT组件称之为重量级组件。

SWING组件

  • 这些类是位于javax.swing包下。
  • SWING组件是基于AWT的基础上,采用纯Java代码重新构建一套新的轻量级组件。
  • SWING组件中的顶级容器还是属于重量级组件,因为其他的组件都要依赖于这个顶级容器来实现(绘制)。
    例如JFrame、JWindow、JApplet组件等

组件分类

组件根据作用不同可以分为:

容器组件类

  • 能添加容器组件或者元素组件的就是容器组件类
JFrame 窗体类 顶级容器 JDialog 对话框 顶级容器 JPanel 面板类 最灵活的容器

元素组件类

  • 一般只会用来显示文字图片接收用户的输入
JLable 标签 显示文字或图片 JTextFiled 文本输入框 接收输入的信息,并直接显示出来 JPasswordField 密码输入框 接收输入的信息,以某一个符号代替显示 JCheckBox 复选框 提供一个可以选择的框,框后面可以显示文字或图片 JButton 按钮 显示文字或图片,有点击效果

上述的容器组件和元素组件类都是SWING组件类,所以你在使用的时候要记得加上包名:javax.swing.JFrame。

如果要使用AWT的组件,那么类名要必SWING组件的类名少一个字母J,例如:java.awt.Frame。
AWT组件中不存在密码输入框元素组件类。

引入组件类时可以将包名属于在程序的最上端,也可以光标选择组件类后,按住Ctrl+Shift+O自动引入包名

辅助类

  • 帮助组件去完成某一个功能的类。常用的有:
FLowLayout 流式布局类 类似于我们使用的word文档,可以设置组件对齐方式(左、右、居中),这个布局方式不可以手动换行,只能根据添加的组件来自动换行 Dimension 封装类 用来存储组件的宽度和高度,它也是AWT中的类。 ImageIcon 图标类 将磁盘上的图片文件加载到程序中,这样组件就可以直接去显示这个图标对象了。

流式布局是java.awt包下的类,使用的时候要加包名:java.awt.FlowLayout

ImageIcon是javax.swing包下的类,使用的时候要加上包名:javax.swing.ImageIcon

例子

实现一个登录界面,使用上述知识。

登录按钮后弹出一个名叫画图的新窗口。

具体步骤:

  • 界面

    • 1.定义Login类,在类中定义主函数和初始化界面的方法。
    • 2.在主函数中,实例化Login类的对象,然后调用初始化界面的方法。
    • 3.在初始化界面的方法中,实例化顶级容器JFrame窗体类的对象。
    • 4.设置窗体容器的属性值:标题、大小、显示位置、关闭操作、布局、禁止调整大小,可见。
    • 5..实例化组件类的对象,然后将组件对象添加到窗体上,这一步必须要写在窗体可见之前
  • 事件接口

    • 1.新建一个LoginListener事件处理类,该类通过implement关键字实现ActionListener动作事件接口,实现接口中全部的抽象方法。
    • 2.新建一个叫做actionPerformed的事件处理方法,在其中实例化一个JFrame窗体容器组件类的对象,设置窗体的属性值。
    • 3.新建一个界面类在界面类中,实例化LoginListener事件处理类的对象,取对象名ll。
    • 4.给butLogin事件源对象,addActionListener()添加动作监听方法,指定事件处理类的对象名ll。 butLogin.addActionListener(ll);

具体代码:

LoginListener事件处理类

import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;/** * 1.定义LoginListener事件处理类,该类实现ActionListener动作事件接口,实现接口中的抽象方法。 */public class LoginListener implements ActionListener {    private JFrame login;//声明窗体对象属性名    /**     * 构造方法     * @param login参数是从Login类中传递过来的JFrame窗体对象     */    public LoginListener(JFrame login){        this.login = login;//将参数赋给属性    }    /**     * 1.实现(重写)接口中的抽象方法     * 此方法是事件的处理方法,并且是发生动作后自动调用     */    public void actionPerformed(ActionEvent e){        //2.在实现(重写)的抽象方法中,创建窗体对象,显示窗体        JFrame frame = new JFrame();        frame.setTitle("画图");        frame.setSize(700, 600);        frame.setDefaultCloseOperation(3);        frame.setLocationRelativeTo(null);        frame.setVisible(true);        //关闭登录界面        login.dispose();    }}

Login类

import javax.swing.JButton;/** * 1.定义Login类, *  */public class Login {    /**     * 1.在类中定义主函数     */    public static void main(String[] args) {        // 2.在主函数中,实例化Login类的对象,然后调用初始化界面的方法。        Login login = new Login();        login.initUI();    }    /**     * 1.自定义初始化界面的方法     */    public void initUI() {        // 3.在初始化界面的方法中,实例化顶级容器JFrame窗体类的对象。        javax.swing.JFrame frame = new javax.swing.JFrame();        // 4.设置窗体容器的属性值:标题、大小、显示位置、关闭操作、布局、禁止调整大小,可见。        frame.setTitle("Login");// 设置窗体的标题        frame.setSize(300, 400);// 设置窗体的大小        // frame.setLocation(300, 100);//设置窗体显示的位置        frame.setLocationRelativeTo(null);// 设置窗体相对于另一个组件的位置,参数为null则表示窗体在屏幕的中央        frame.setDefaultCloseOperation(3);// 设置窗体的关闭操作,3表示关闭窗体退出程序。        frame.setResizable(false);// 设置禁止调整窗体的大小        /**         * 实例化FlowLayout流式布局类的对象,         */        java.awt.FlowLayout fl = new java.awt.FlowLayout();        frame.setLayout(fl);//将窗体的组件对齐方式设置为fl流式布局        // 实例化一个ImageIcon类的对象,用来加载磁盘上的图片文件到程序中        javax.swing.ImageIcon image = new javax.swing.ImageIcon("src/practice/login.png");        javax.swing.JLabel labImage = new javax.swing.JLabel(image);        frame.add(labImage);        javax.swing.JLabel labName = new javax.swing.JLabel("账号:");        frame.add(labName);        javax.swing.JTextField textName = new javax.swing.JTextField();        textName.setPreferredSize(new java.awt.Dimension(240,30));        frame.add(textName);        JButton butLogin= new JButton("登录");        frame.add(butLogin);        frame.setVisible(true);// 设置窗体为可见        /**         * 3.实例化LoginListener事件处理类的对象,对象名为ll;同时将登录界面的frame窗体对象传递到事件处理类中         */        LoginListener ll = new LoginListener(frame);        /**         * 4.给事件源butLogin按钮对象添加addActionListener()动作监听方法,指定事件处理类对象名ll         */        butLogin.addActionListener(ll);    }}

运行结果

登录界面

点击登录后弹出的界面

0 0
原创粉丝点击