JFrame登录注册

使用JFrame制作登录注册界面

  今天尝试使用Java swing制作登录注册界面,使用监听器实现简单功能。

整体规划:

  1. 制作主界面窗体
  2. 添加账号密码文本框以及登录注册按钮
  3. 为登录注册按钮添加监听器来实现对账号密码的分析
  4. 新建User类用来存储用户信息
  5. 实现登录注册的基本逻辑(禁止重复,输出信息等)

知识储备:

1. 窗体:

  • Java Swing 的JFrame类就是窗体类,实现创建界面
  • 我们只需要使用JFrame的各种内置方法即可设置大小参数,关闭方法,添加文本框JTextField,按钮JButton组件等

2. 什么是监听器

  • 事件监听由三部分组成:事件源,事件,监听器
  • 监听器就是为了查看事件源是否发生了某一事件,在我们的界面中可以理解为监听按钮是否被点击
  • 监听器都是接口,需要我们创建类自己实现,这样我们就可以自己编写如何处理事件的变化

实现过程

1.添加主界面窗体

JFrame jf = new JFrame();//创建窗体
jf.setTitle("用户界面");//设置标题
jf.setSize(500,600);//窗体长宽像素大小
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//默认关闭后退出进程
//设置布局
jf.setLayout(new FlowLayout());//流式布局t());

2.添加文本框以及按钮组件:

//创建组件对象
JButton btn1 = new JButton("登录");
JButton btn2 = new JButton("注册");

JLabel nameJla = new JLabel("账号:");//左侧说明文字
JLabel pwdJla = new JLabel("密码:");

JTextField nameIn = new JTextField();//文本框
JPasswordField pwdIn = new JPasswordField();//JPasswordField是专为密码设立的文本框,可以使键入文字用小圆点显示

//窗体添加组件
jf.add(nameJla);
jf.add(nameIn);
jf.add(pwdJla);
jf.add(pwdIn);
jf.add(btn1);
jf.add(btn2);

jf.setVisible(true);//加了这行代码我们才可以看见窗体

  我们来看一下现在的窗口样子:
在这里插入图片描述

  这文本框太小了,不行,我们要设置一下文本框的大小,那么也使用JFrame的setSize()方法可以吗,我们尝试一下:
在这里插入图片描述

  还是这个样子,所以这种方法不行

  这里我们要用到setPreferredSize()方法,来设置文本框的绝对尺寸,当打出这个函数的时候,我们会发现它需要一个Dimension类型的参数,这个类是用来设置大小的,我们直接创建即可。

//设置组件对象的属性/内容
Dimension dim = new Dimension(410,35);
nameIn.setPreferredSize(dim);//绝对尺寸
pwdIn.setPreferredSize(dim);

  注意这段代码要加到 jf.setVisible(true) 前面,因为这句代码会显示它之前的设置好的界面,如果改大小的代码在它后面是没有任何效果的

  我们再看一下效果:
在这里插入图片描述

  嗯,基本界面已经完毕了,下面我们进入到监听器部分

3.监听器

  我们现在要给两个按钮添加监听器,以判断是登陆还是注册。
  这里我们使用的是ActionListener监听器,从名称中我们也可以看出,这是动作监听器,这里就是监听我们点击按钮的动作。
  刚才说过,监听器都是接口,需要我们自己实现,这里我们要在定义一个类进行继承。

  这个监听器只有一个方法需要实现:

public interface ActionListener extends EventListener {

    /**
     * Invoked when an action occurs.
     */
    public void actionPerformed(ActionEvent e);

}

  实现此方法,这里事件自带方法getActionCommand()获取按钮上的文字,并调用文本框的自带方法getText()获取文本框里面的文字。

  由于我们要使用UI类中的文本框对象,这里我们定义两个文本框便于后续导入,但绝不是new新对象。

public class UserUIListener implements ActionListener {
    //定义两个输入框对象变量名: 如果重新创建一个对象 / 当时这个输入框对象不是界面上的对象
//    JTextField nameIn = new JTextField();
    JTextField nameIn = null;//或者不写后面
    // 属性: 当这个类创建了对象之后,对象中就会生成一份属性,对象就可以调用自己的这份属性
    JPasswordField pwdIn = null;

    // 点击被监听的按钮 就调用 这个方法
    // ActionEvent e : e 用来获取点击按钮上的字符串
    public void actionPerformed(ActionEvent e){
        String actonstr = e.getActionCommand();
        System.out.println(actonstr+"被点击了");
        String namestr = nameIn.getText();
        String pwdstr = pwdIn.getText();
        System.out.println("namestr:"+namestr);
        System.out.println("pwdstr:"+pwdstr);

  在UI类中为我们的监听器传文本框对象

//监听加载
        UserUIListener uiListen = new UserUIListener();

        //当下面两个按钮被点击时 , 要使用uilisten 调用响应的方法
        btn1.addActionListener(uiListen);
        btn2.addActionListener(uiListen);

        // 将加载到界面上的输入框对象 的引用地址 复制一份传给 uilisten 中的变量名
        // 这样的话,uilisten 在底层调用响应方法的时候, 就可以使用这个地址获取文本
        uiListen.nameIn = nameIn;// 传值 赋值 右传左
        uiListen.pwdIn = pwdIn;

  这下我们就可以测试了,先输入账号为123,密码为456在这里插入图片描述在这里插入图片描述
  得到了预期结果,我们就可以继续了

  显然我们需要存储我们的用户信息,先定义一个User类

public class User {
    String name;
    String pwd;

    // 构造方法
    // 以类名为方法名
    // 创建对象的时候执行

    public User(String name, String pwd) {
        this.name = name;
        this.pwd = pwd;
    }
}

  为了存储User对象,我们使用ArrayList<User>来存储,它有常用的四个特性方法:

  • get
  • add
  • remove
  • size():查看已经存储了几个
ArrayList<User> userList = new ArrayList();

  我们来分析一下登录注册的逻辑:用两个思维导图
在这里插入图片描述
在这里插入图片描述

  我们先检测点击了哪个按钮,然后每个按钮执行不同功能,这里JOptionPane.showMessageDialog();函数作用是输出提示信息,就是提示、警告、错误的窗口,注册查重和登录都是遍历ArrayList,一旦不符合要求,立刻return终止函数并输出相应错误语句。

if(actonstr.equals("登录")){
    // 遍历所有已经存在的用户对象,比较用户名是否有跟输入框输入的一致
    // 看看是否已经注册了
    for(int i =0; i < userList.size(); i++){
        // 遍历取出用户对象
        User getuser = userList.get(i);
        if(getuser.name.equals(namestr)){
            //比较密码
            if(getuser.pwd.equals(namestr)){
                // 比较密码
                if(getuser.pwd.equals(pwdstr)){
                    JOptionPane.showMessageDialog(null,"登陆成功!!");
                    return;
                }
            }
        }
    }
    JOptionPane.showMessageDialog(null,"未查询到此用户,请先注册或者修改输入账号名");
}else if(actonstr.equals("注册")){

    // 遍历所有已经存在的用户对象,比较用户名是否有跟输入框输入的一致
    for(int i =0; i < userList.size(); i++){
        // 遍历取出用户对象
        User getuser = userList.get(i);
        if(getuser.name.equals(namestr)){
            // 提示弹窗
            JOptionPane.showMessageDialog(null,
                    "该用户已经存在!!");
            // 提示之后 直接结束方法
            return;// 执行了 方法就此结束
        }
    }

    // 将数据打包为一个对象 存储list
    User user = new User(namestr,pwdstr);
    userList.add(user);
    JOptionPane.showMessageDialog(null,
            "恭喜注册为本平台的第"+userList.size()+"位用户");
}

  到这里我们就基本完成啦,下面验收一下

  注册用户
在这里插入图片描述

  重复注册
在这里插入图片描述

  登录
在这里插入图片描述

  错误密码或账号
在这里插入图片描述

总结:

  1. 熟悉了JFrame

  2. 对监听器有了清晰的认识并能够应用

  3. 对Java类与类之间的关联关系有了进一步理解

  4. 作为第一篇博文,学习了markdown的相关语法

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Java中,登录和注册功能通常涉及到用户认证和数据存储。这里我会提供一个简单的示例,使用Java Swing GUI和`java.util.Scanner`进行输入验证。请注意,这只是一个基本框架,实际应用中你可能需要连接到数据库或使用更安全的身份验证库。 ```java import javax.swing.*; import java.util.Scanner; public class LoginRegisterExample { private static final String REGISTER_BUTTON_TEXT = "Register"; private static final String LOGIN_BUTTON_TEXT = "Login"; public static void main(String[] args) { JFrame frame = new JFrame("Login/Register"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 200); JPanel panel = new JPanel(); panel.setLayout(new GridLayout(2, 2)); JLabel usernameLabel = new JLabel("Username:"); JTextField usernameField = new JTextField(15); JLabel passwordLabel = new JLabel("Password:"); JPasswordField passwordField = new JPasswordField(15); JButton registerButton = new JButton(REGISTER_BUTTON_TEXT); JButton loginButton = new JButton(LOGIN_BUTTON_TEXT); panel.add(usernameLabel); panel.add(usernameField); panel.add(passwordLabel); panel.add(passwordField); registerButton.addActionListener(e -> register()); loginButton.addActionListener(e -> login()); frame.add(panel); frame.add(registerButton, BorderLayout.SOUTH); frame.add(loginButton, BorderLayout.NORTH); frame.setVisible(true); } private static void register() { Scanner scanner = new Scanner(System.in); System.out.println("Enter a username:"); String username = scanner.nextLine(); System.out.println("Enter a password:"); String password = scanner.nextLine(); // Here you would typically save the user data to a database or file // For now, assume it's successful and move on to login login(); } private static void login() { Scanner scanner = new Scanner(System.in); System.out.println("Enter your username:"); String enteredUsername = scanner.nextLine(); System.out.println("Enter your password:"); String enteredPassword = new String(passwordField.getPassword()); // Here you would check if the entered credentials match a stored user // For now, assume it's a simple comparison and proceed with further actions if (enteredUsername.equals("admin") && enteredPassword.equals("password")) { System.out.println("Login successful!"); } else { System.out.println("Invalid credentials. Please try again."); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Neko1145

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值