[Java GUI]学习笔记

前言

在看了书上的案例,都选择继承JFrame,实现Listener接口,主要步骤如下:

  1. 继承JFrame,实现接口,ActionListener、KeyListener…
  2. 定义组件
  3. 构造方法,窗体基本设置,实例化组件,添加监听
  4. 事件处理

下面用一个登录页面来做详解
在这里插入图片描述
账号为abc,密码为1234时登录成功
在这里插入图片描述

1.继承JFrame,实现Listener接口

类似于如下的定义,继承了JFrame,实现ActionListener接口

public class Work1 extends JFrame implements ActionListener {
    
    }

2.定义组件

看书上案例,一般来说,定义好类就开始定义需要的组件了,例如下例

public class Book2 extends JFrame implements ActionListener{
    
    
    // 实现这个登录界面,需要两个按钮,一个登录,一个退出
    private JButton b_ok,b_exit;
    // 登录成功的时候输出的文本框
    private JLabel t_la;
    // 输入用户名的文本框
    private JTextField userName;
    // 输入密码的密码框
    private JPasswordField password;

3.构造方法内,窗体基本设置,实例化组件,添加监听

在定义好需要的组件后,就开始添加内容了
下面的操作都是在该类的构造方法里面进行

public Book2() {
    
    
	xxxx
}
  1. 首先是设置窗体的基本信息
// 利用继承的JFrame定义窗体名
super("登入界面");
// 设置窗体大小
setSize(500,100);
// 这个的意思是设置窗口相对于指定组件的位置,当值为null时出现在屏幕正中间
setLocationRelativeTo(null);
// 用户单击窗口的关闭按钮时能直接关闭程序
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// 定义窗口的浮动
setLayout(new FlowLayout());
  1. 然后就是对之前定义的组件实例化出来,并为那些组件进行基础的信息设定
// 5表示文本框长度
userName = new JTextField(5);
password = new JPasswordField(5);
b_ok = new JButton("确定");
b_exit = new JButton("退出");
// 登录判断的返回信息,先设置为空
t_la = new JLabel(" ");
  1. 实例化好以后,就全部加进窗口里面,使用这个add函数
add(new JLabel("账号:"));
add(userName);
add(new JLabel("密码:"));
add(password);
add(b_ok);
add(b_exit);
add(t_la);
  1. 在add进窗口后,记得加上这个,让他显现出来
setVisible(true);
  1. 如果有需要进行逻辑操作的组件,例如这个按钮,就需要为其添加监听,需要什么监听就加什么监听,例如这里是鼠标点击监听,就是addActionListener(),其他的就addxxxListener()

b_exit.addActionListener(this);
b_ok.addActionListener(this);

事件处理

在添加了监听后,捕捉到动作后就会进行相关的事件处理,这里我们通过实现相关接口的方法,例如这里我们implements ActionListener,那么就要实现他的actionPerformed

public void actionPerformed(ActionEvent e) {
    
    
	xxx
}

这里就可以把我们所需要的逻辑添加进去了

public void actionPerformed(ActionEvent e) {
    
    

    if(e.getSource() == b_exit)
        System.exit(0);
    if(e.getActionCommand().equals("确定")) {
    
    

        String KeyText =String.valueOf(password.getPassword());//获取密码框文本
        if(userName.getText().equals("abc") && KeyText.equals("1234"))
            t_la.setText("欢迎您,abc!");
        else
            t_la.setText("账号或密码错误!");
        setVisible(true);
    }

    }

这里有两个函数getSourcegetActionCommand,分别是获得事件源和获得事件源绑定的文字

完成

至此所有的操作就已经完成了,完整代码如下:

import javax.swing.*;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/*例4.2*/
public class Book2 extends JFrame implements ActionListener{
    
    
    // 实现这个登录界面,需要两个按钮,一个登录,一个退出
    private JButton b_ok,b_exit;
    // 登录成功的时候输出的文本框
    private JLabel t_la;
    // 输入用户名的文本框
    private JTextField userName;
    // 输入密码的密码框
    private JPasswordField password;

    public Book2() {
    
    

        super("登入界面");
        setSize(500,100);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        setLayout(new FlowLayout());
        userName = new JTextField(5);
        password = new JPasswordField(5);
        b_ok = new JButton("确定");
        b_exit = new JButton("退出");
        t_la = new JLabel(" ");
        add(new JLabel("账号:"));
        add(userName);
        add(new JLabel("密码:"));
        add(password);
        add(b_ok);
        add(b_exit);
        add(t_la);
        setVisible(true);

        b_exit.addActionListener(this);
        b_ok.addActionListener(this);

    }

    public void actionPerformed(ActionEvent e) {
    
    

        if(e.getSource() == b_exit)
            System.exit(0);
        if(e.getActionCommand().equals("确定")) {
    
    

            String KeyText =String.valueOf(password.getPassword());//获取密码框文本
            if(userName.getText().equals("abc") && KeyText.equals("1234"))
                t_la.setText("欢迎您,abc!");
            else
                t_la.setText("账号或密码错误!");
            setVisible(true);
        }

    }

    public static void main(String[] args) {
    
    
        // TODO Auto-generated method stub
        new Book2();
    }

}

猜你喜欢

转载自blog.csdn.net/m0_51078229/article/details/121239494