用NetBeans开发Java GUI程序(用户登录注册)

今天给喜欢Java的朋友们推荐一款集成开发环境平时打代码,做普通项目,我一般用的就是IDEA但是如果要做图形用户界面(GUI),给大家推荐NetBeans如果需要安装包,请在文章下评论,或者关注我,然后直接私信我右边有控件、容器、菜单…,你想做什么样的,直接从右边拖出来即可非常的方便现在来做一个用户登录注册玩玩给大家先看看,我随便做的一个成果如果您的用户名和密码正确,点击登录后...
摘要由CSDN通过智能技术生成

今天给喜欢Java的朋友们推荐一款集成开发环境
平时打代码,做普通项目,我一般用的就是IDEA
但是如果要做图形用户界面(GUI),给大家推荐NetBeans
如果需要安装包,请在文章下评论,或者关注我,然后直接私信我

在这里插入图片描述
右边有控件、容器、菜单…,你想做什么样的,直接从右边拖出来即可
非常的方便

现在来做一个用户登录注册玩玩
给大家先看看,我随便做的一个成果
在这里插入图片描述
如果您的用户名和密码正确,点击登录后,先会弹框显示登录成功,必须点确定,其他地方不能点,点确定后,会进入,我自己随便做的一个模拟四则运算的简单计算器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里面所有界面的小图标,都是我自己改的,待会给你们说怎么改
这里,要知道,除数不能为0,如果您选择除号后,点击计算,会弹框提示
在这里插入图片描述
再给大家看看注册界面,其实和登录界面差不多
然后可以自己定义用户名和密码的规则,然后如果用户注册时,没满足点击注册,会给玩家提示出规则
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
差不多就这些了,有很多细节,我在下面给大家说一下,现在展示完了,给大家说说我思路和分析
在这里插入图片描述
这就是我的src中分包和Java文件

1.用户操作接口包 cn.itcast.dao(UserDao.java也是一个接口)

2.用户类操作包 cn.itcast.dao.impl
(UserDaoImpl.java就是UserDao接口的实现类)

3.用户类基本描述类包 cn.itcast.pojo (User.java是一个用户类)

4.资源包 cn.itcast.resource
(里面放了两张图片,我在百度截图的,用于修改窗体的图标)

5.界面效果包 cn.itcast.util (UiUtil.java是一个专门做界面效果的类)

6.视图包 cn.itcast.view
a:LoginFrame.java是登录界面,
b:NewJFrame.java是模拟四则运算简单计算器
c:RegistFrame.java是注册界面

我们现在开始内容填充:

1.用户类(cn.itcast.pojo 包下的User.java)

( 这没啥讲的,就只有成员变量,构造方法,成员方法getXxx()/setXxx() )
代码如下:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package cn.itcast.pojo;

/**
 *
 * @author Lenovo
 */
public class User {
   
    private String username;    //用户名
    private String password;    //密码
    
    public User(){
   }

    /**
     * @return the username
     */
    public String getUsername() {
   
        return username;
    }

    /**
     * @param username the username to set
     */
    public void setUsername(String username) {
   
        this.username = username;
    }

    /**
     * @return the password
     */
    public String getPassword() {
   
        return password;
    }

    /**
     * @param password the password to set
     */
    public void setPassword(String password) {
   
        this.password = password;
    }
    
    
}

2.用户操作接口(cn.itcast.dao 包下的UserDao.java)

(用户的操作,当然不能定义成一个类,会有很多的操作,所以我觉得是一个接口,最好的是,每一个不同的操作都定义成一个接口,任何用户,需要用什么操作,就实现什么接口,Java里面只能单继承,可以多实现,但是登陆和注册,是每一个用户都拥有的操作,所以两个操作我定义在一个接口中,有用户登录功能和用户注册功能)

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package cn.itcast.dao;

import cn.itcast.pojo.User;

/**
 *
 * @author Lenovo
 */
public interface UserDao {
   
    /**
     * 这是用户登录功能
     * @param username  用户名
     * @param password  密码
     * @return 登录是否成功
     */
    public abstract boolean login(String username,String password);
    
    /**
     * 这是用户注册功能
     * @param user 被注册的用户信息
     */
    public abstract void regist(User user);
}

3.用户操作类(cn.itcast.dao.impl 包下的cn.itcast.dao.impl)

(这是上面那个接口的实现类,肯定要重写接口中的用户登录和注册两个抽象方法)
用户注册:我们还是用的IO流,因为不会有图片,都是可读懂的,所以选择用高效字符输出流(写入文件user.txt),写入的时候我们我们选择 用户名+“=”+密码 这种方式存储到文件中,这样更方便我们判断用户名和密码是否匹配,一定要记得释放资源,要把bw.colse()方法放在finally里面

用户登录:我也也用的IO流,用的高效字符输入流(读取文件user.txt),读取数据的时候选择每次读取一行数据,再用String类中public String[] split(String regex)方法来分割字符串
String[] datas = line.split("=");这样就把用户名和密码分别存入datas字符串数组中下标为0和1中,再用equals方法,判断用户登录输入用户名和密码是否匹配,如果都匹配成功,则返回true,然后break,如果匹配不成功,再循环,直到读取到字符串为null,则退出循环,返回false.

注意:
(1)文件要在类加载时就自动创建,防止,玩家先登录,则没有文件,会报错
(2)写入文件时,要追加写入,不然每一次注册,都重新创建一个新的user.txt

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package cn.itcast.dao.impl;

import cn.itcast.dao.UserDao;
import cn.itcast.pojo.User;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Lenovo
 */
public class UserDaoImpl implements UserDao{
   
    //定义文件
    private static File file = new File("user.txt");
    
    //类加载的时候就把文件创建
    static {
   
        try {
   
            file.createNewFile();
        } catch (IOException ex) {
   
            ex.printStackTrace();
        }
    }
    
    @Override
    public boolean login(String username, String password) {
   
        boolean flag=false;
        
        BufferedReader br = null;
        try {
   
            br = new BufferedReader(new FileReader(file));
            String line = null;
            while((line=br.readLine()) != null){
   
                String[] datas = line.split("=");
                if(datas[0].equals(username)&&datas[1].equals(password)){
   
                    flag=true;
                    break;
                }
            }
        } catch (FileNotFoundException ex) {
   
           ex.printStackTrace();
        } catch (IOException ex) {
   
           ex.printStackTrace();
        }finally{
   
            try {
   
                br.close();
            } catch (IOException ex) {
   
                ex.printStackTrace();
            }
        }
        
        return flag;
    }

    @Override
    public void regist(User user) {
   
        BufferedWriter bw = null;
        
        try {
   
            bw=new BufferedWriter(new FileWriter("user.txt",true));
            bw.write(user.getUsername()+"="+user.getPassword());
            bw.newLine();   //换行
            bw.flush();     //刷新
        } catch (IOException ex) {
   
           ex.printStackTrace();
        }finally{
   
            try {
   
                bw.close();     //释放资源
            } catch (IOException ex) {
   
                ex.printStackTrace();
            }
        }
    }
    
}

4.界面效果包 cn.itcast.util (UiUtil.java是一个专门做界面效果的类)

这里要把UiUtil构造方法私有化,防止外界通过构造创建对象,调用方法,所以我们要把里面的方法都为静态,可以直接用类名调用

对界面做效果,一般都会用到工具类(Toolkit类)
//获取工具类对象
//public static Toolkit getDefaultToolkit():获取默认工具包
通过上面的Toolkit类中的静态方法就可以获取工具类的对象

(1)修改窗体图标
JFrame类
public void setIconImage(Image image)
设置要作为此窗口图标显示的图像。

image对象通过下面方法返回:
Toolkit类中的方法,通过上面教的创建对象,调用方法
public abstract Image getImage(String filename)返回一幅图像,该图像从指定文件中获取像素数据,图像格式可以是 GIF、JPEG 或 PNG。

(2)设置窗体居中
/*
思路:
A:获取屏幕的宽和高
B:获取窗体的宽和高
C:(用屏幕的高-窗体的高)/2,(用屏幕的高-窗体的高)/2作为窗体的新坐标
*/
获取屏幕的宽和高,当然就要用Toolkit的对象调用getScreenSize()方法
获取窗体的宽和高,用JFrame的对象调用getWidth(),getHeight()方法
设置窗体的新坐标,用JFrame的对象调用setLocation()方法

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package cn.itcast.util;

import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JFrame;

/**
 * 专门做界面效果的类
 *
 * @author Lenovo
 */
public class UiUtil {
   

    private UiUtil() {
   
    }

    //修改窗体的图标
    public static void setFrameImage(JFrame jf) {
   
        //获取工具类对象    
        //public static Toolkit getDefaultToolkit():获取默认工具包
        Toolkit tk = Toolkit.getDefaultToolkit();

        //根据路径获取图片
        Image i = tk.getImage("src\\cn\\itcast\\resource\\P8K7U9~SLY5A{52BLGYDW]T.png");

        //给窗体设置图片
        jf.setIconImage(i);
    }
    
    //修改窗体的图标
    public static void setFrameImage(JFrame jf,String imageName) {
   
        //获取工具类对象    
        //public static Toolkit getDefaultToolkit():获取默认工具包
        Toolkit tk = Toolkit.getDefaultToolkit();

        //根据路径获取图片
        Image i = tk.getImage("src\\cn\\itcast\\resource\\"+imageName);

        //给窗体设置图片
        jf.setIconImage(i);
    }

    //设置窗体居中
    public static void setFrameConter(JFrame jf) {
   
        /*
        思路:
        A:获取屏幕的宽和高
        B:获取窗体的宽和高
        C:(用屏幕的高-窗体的高)/2,(用屏幕的高-窗体的高)/2作为窗体的新坐标
         */

        //获取工具对象
        Toolkit tk = Toolkit.getDefaultToolkit();

        //获取屏幕的宽和高
        Dimension d = tk.getScreenSize();
        double srceenWidth = d.getWidth();
        double srceenHeigh = d.getHeight();

        //获取窗体的宽和高
        int frameWidth = jf.getWidth();
        int frameHeigh = jf.getHeight();

        //获取新的宽和高
        int width = (int) (srceenWidth - frameWidth) / 2;
        int heigh = (int) (srceenHeigh - frameHeigh) / 2;
        //设置窗体的新坐标
        jf.setLocation(width, heigh);
    }
}

5.视图

a:LoginFrame.java是登录界面,
b:NewJFrame.java是模拟四则运算简单计算器
c:RegistFrame.java是注册界面
这三个我给你们讲一个,但是三个的源代码和视图我都会给你们,因为基本都一样,你们如果认真看了我说的,并且想了,就一定都懂了,那我讲一个最难的登录界面吧,
在这里插入图片描述

上图是登录的设计图(上面)

这些所有控件都可以编辑文本,更改变量名称
编辑文本就是展示给用户看的,更改变量名称就是我们在源代码中,用这些变量就this.名称就是,如果不需要用的东西,就可以不用更改变量名称,例如用户名和密码两个标签。
用户名和密码都是标签,用户名后面的白色用户可以输入的框框,是文本字段,密码后面的白色用户可以输入的框框,是口令字段,输入密码就不会显示出来。
登录,重置,注册,就是按钮,是可以绑定事件的,意思玩家一点击,就可以进行你绑定的事件

现在我们进入源代码分析

我们需要在该类中定义一个私有方法(设置标题,设置此窗体是否可由用户调整大小,设置窗体居中,修改窗体图标),然后在该类的无参构造中,实现此私有方法,意思一启动,就设置窗体属性

然后现在需要做的就是,对每一个按钮,来进行事件绑定
(1)登录按钮
既然是登录,我们就要校验用户名和密码是否匹配
/*
思路:
A:获取用户名和密码
B:正则表达式校验用户名和密码
C:创建对象调用功能,返回一个boolean值
D:根据boolean值给出提示
*/
思路上面,在源代码里面,我思路写的很清楚,可以认真看看,一定能看懂
(2)重置按钮
既然是重置,我们就要清空用户名和密码中的东西,再获取光标
(3)注册按钮
让注册的视图可见,关闭登录的视图

现在我给你们登录的源码(下面)
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package cn.itcast.view;

import cn.itcast.dao.UserDao;
import cn.itcast.dao.impl.UserDaoImpl;
import cn.itcast.util.UiUtil;
import javax.swing.JOptionPane;

/**
 *
 * @author Lenovo
 */
public class LoginFrame extends javax.swing.JFrame {
   

    /**
     * Creates new form LoginFrame
     */
    public LoginFrame() {
   
        initComponents();
        init();
    }
    
    private void init
  • 19
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值