JAVA实验:完成一个电商购物平台的登录注册窗体,点击“点我注册”,显示注册窗体,用户输入用户信息,点击提交后到达显示用户信息的窗体。

 

83f402e48bfe4067a287140a04812c1a.png

 内容3在内容2的基础上,用户点击登录注册窗体的登录按钮,到达商品信息查询的窗体,窗体如图3所示。366a911f54bb447ea66e2b965acfe090.png

 本次实验主要利用java类swing中的各种方法。

实验思路:通过实验所给出的窗口,使用swing中方法进行构建,并且各个窗口中的关联可以使用监视器来连接,最笨的方法就是创建各个窗口的类,通过监视器调用得出。

 

首先创建登录注册窗体:

可以看出是使用自定义的窗口布局NULL才可以达成,但是我是不熟练的,因此决定使用setLayout常用布局。通过分析发现需要建立三个JLabel(用户名,用户类型,密码),两个JTextField类(用于输入用户名和密码)一个下拉框JComboBox<String>,用于用户种类的选择,以及三个按钮JButton(登录,重置,点我注册),下面是详细代码

 

package shiyan11_2;

import javax.swing.*;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

 

publi class SigninFrame extends JFrame {
    //窗体上的组件
    private JLabel l_username,l_userkind,l_password;
    private JTextField t_username;
    private JPasswordField p_password;
    private JComboBox<String> u_userkind;
    private JButton b_sgin, b_reset,b_Reginister;
    
    public SigninFrame() {        //设置窗体参数
        this.setTitle("登录注册窗体");
        this.setSize(500, 309);
        this.setLocation(500, 300);
        init();
        this.setVisible(true);
    }
    
    public void init(){        
        this.setLayout(new GridLayout(5,2,2,5));
        l_username = new JLabel("用户名",JLabel.CENTER);
        l_userkind = new JLabel("用户类型",JLabel.CENTER);
        l_password = new JLabel("密码",JLabel.CENTER);
        
        t_username = new JTextField();
        
        u_userkind = new JComboBox<String>();
        u_userkind.addItem("请选择:");u_userkind.addItem("管理员");u_userkind.addItem("普通用户");
        
        p_password = new JPasswordField();
        
        b_sgin = new JButton("登录");
         b_sgin.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    new inquire();
                    
                }     
            });
        
        b_reset = new JButton("重置");
        b_reset.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                t_username.setText("");
                u_userkind.setSelectedIndex(0);
                p_password.setText("");
            }
        });
        
        b_Reginister = new JButton("点我注册");
        b_Reginister.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                new RegisterFrame();
            }
        });
        
        
        this.add(l_username);
        this.add(t_username);
        
        this.add(l_userkind);
        this.add(u_userkind);
        
        this.add(l_password);
        this.add(p_password);
        
        this.add(b_sgin);
        this.add(b_reset);
        this.add(b_Reginister);
    }    
}

 

其中重置的地方需要一个监听器,达到点击该按钮,会重置(清空或者回复初态)。在重置中有setSelectedIndex()方法,作用是恢复到下拉框的第几个,我的0位初态,所以输入了0.

然后点我注册需要引出一个新框——注册界面,这里我直接新建RegisterFrame类来调用。

下面是RegisterFrame类的代码:

package shiyan11_2;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;


public class RegisterFrame extends JFrame {
    //窗体上的组件
    private JLabel l_id, l_name, l_password1, l_password2, l_sex, l_city;
    private JTextField t_id, t_name;
    private JPasswordField p_password1, p_password2;
    private JRadioButton r_male, r_female;
    private JComboBox<String> c_city;
    private JButton b_reg, b_reset;
    
    
    public RegisterFrame() {
        this.setTitle("电商购物平台_注册界面");
        this.setSize(500, 309);
        this.setLocation(500, 300);
        init();
        this.setVisible(true);
    }
    
    public void init() {
        
        this.setLayout(new GridLayout(7,2,2,5));
        l_id = new JLabel("账号",JLabel.CENTER);
        l_name = new JLabel("姓名",JLabel.CENTER);
        l_password1 = new JLabel("密码",JLabel.CENTER);
        l_password2 = new JLabel("确认密码",JLabel.CENTER);
        l_sex = new JLabel("性别",JLabel.CENTER);
        l_city = new JLabel("城市",JLabel.CENTER);
        
        t_id = new JTextField();
        t_name = new JTextField();
        
        p_password1 = new JPasswordField();
        p_password2 = new JPasswordField();
        
        r_male = new JRadioButton("男");
        r_female = new JRadioButton("女");
        ButtonGroup bg = new ButtonGroup();
        bg.add(r_male);
        bg.add(r_female);
        JPanel p = new JPanel();
        p.add(r_male);
        p.add(r_female);
        
        
        c_city = new  JComboBox<String>();
        c_city.addItem("请选择:");
        c_city.addItem("河北");c_city.addItem("山东");c_city.addItem("辽宁");
        c_city.addItem("黑龙江");c_city.addItem("吉林");c_city.addItem("甘肃");
        c_city.addItem("青海");c_city.addItem("河南");c_city.addItem("江苏");
        c_city.addItem("湖北");c_city.addItem("湖南");c_city.addItem("江西");
        c_city.addItem("浙江");c_city.addItem("广东");c_city.addItem("云南");
        c_city.addItem("福建");c_city.addItem("台湾");c_city.addItem("海南");
        c_city.addItem("山西");c_city.addItem("四川");c_city.addItem("陕西");
        c_city.addItem("贵州");c_city.addItem("安徽");
        c_city.addItem("北京");c_city.addItem("天津");c_city.addItem("上海");
        c_city.addItem("重庆");c_city.addItem("内蒙古自治区");c_city.addItem("广西壮族自治区");
        c_city.addItem("西藏自治区");c_city.addItem("宁夏回族自治区");c_city.addItem("新疆维吾尔族自治区");
        c_city.addItem("香港特别行政区");c_city.addItem("澳门特别行政区");

        
        b_reg = new JButton("注册");
        //添加时间监听器,事件源点击有效,收集用户信息并展示
        b_reg.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // 完成注册功能,从窗口收集用户信息,并且展示
                String id = t_id.getText();
                String name = t_name.getText();
                String password1 = new String( p_password1.getPassword()); 
                String password2 = new String( p_password2.getPassword());
                //两次密码不一致处理
                if(!password1.equals(password2)) {
                    //shwoMessage();
                    JOptionPane.showMessageDialog(p_password2, "两次输入的密码不一致!!","Error!",JOptionPane.WARNING_MESSAGE);
                    p_password1.setText("");
                    p_password2.setText("");
                    return;
                }
                char sex = ' ';
                if(r_male.isSelected()) {
                    sex = '男';
                }else {sex = '女';}
                String city = (String)c_city.getSelectedItem();
                //用模型封装收集到的信息
                User u = new User(id, name, password1, sex, city, "");
                //展示信息
                new UserInfoFrame(u);
            }     
        });
        
        
                
        b_reset = new JButton("重置");
        b_reset.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            t_id.setText("");    
            t_name.setText("");
            p_password1.setText("");
            p_password2.setText("");
            bg.clearSelection();
            c_city.setSelectedIndex(0);            
            }
        });
        
        
        this.add(l_id);
        this.add(t_id);
        
        this.add(l_name);
        this.add(t_name);
        
        this.add(l_password1);
        this.add(p_password1);
        
        this.add(l_password2);
        this.add(p_password2);

        
        this.add(l_sex);
        this.add(p);
       // this.add(r_male);
       // this.add(r_female);
        
        this.add(l_city);
        this.add(c_city);
        
        this.add(b_reg);
        this.add(b_reset);
                    
    }
    }
这里需要说一下就是重置的方法,需要用到上面的setSelectedIndex(0)以及一个新的方法clearSelection,改方法的作用是取消所有选择,在这里可以取消掉对于bg里的男女选择。

这里的注册监视器内用到了MVC模型:

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

  • Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
  • View(视图) - 视图代表模型包含的数据的可视化。
  • Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。

    MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

  • Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
  • View(视图) - 视图代表模型包含的数据的可视化。
  • Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。

 

下面是模型的代码,

package shiyan11_2;


//MVC中的m(模型),用来封装数据。
public class User {
    private String id;
    private String name;
    private String password;
    private char sex;
    private String city;
    private String type;
    
    public User(String id, String name, String password, char sex, String city, String type) {
        super();
        this.id = id;
        this.name = name;
        this.password = password;
        this.sex = sex;
        this.city = city;
        this.type = type;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", password=" + password + ", sex=" + sex + ", city=" + city
                + ", type=" + type + "]";
    }
    
    

    
}
注册的监视器中要求输出表47b7300f6b8a49c0afca94187b7cb846.png

这里建立了类,通过调用实现

package shiyan11_2;

import javax.swing.*;

public class UserInfoFrame extends JFrame {
    
    private JTable t_user;
    public UserInfoFrame(User u) {
        //窗体初始化
        this.setTitle("电商购物平台_用户信息");
        this.setSize(500, 309);
        this.setLocation(500, 300);
        init(u);
        this.setVisible(true);
    }
    
    public void init(User u) {
        
        Object[][] user = {{u.getId(),u.getName(),u.getPassword(),u.getSex(),u.getCity()}};
        Object[] colName = {"用户名","姓名","密码","性别","城市"};
        t_user = new JTable(user,colName);
        this.add(new JScrollPane(t_user));
    }
    
    
}
 

最后加入测试类,看看本次实验的效果!

 

7da4951c56724cefadad361e423b38b1.png

首先是主界面的重置,输入内容,并且选择了用户类型后,点击重置回到初始状态。

点击注册,弹出新的窗口:

8049e02f6f514245926f1edf45c57b39.png

测试注册界面的重置,输入内容,并且选择了性别和城市后,点击重置回到初始状态。

测试注册功能:输入不同的密码:bf92734237b94aebb54c3d35d85233ef.png

 

弹出错误警告。

 

测试注册成功: 11c5dd3f65e6411585c3b0286d213639.png

试用登录功能,后弹出一个查询框,设计不太完善,希望看到的同学,可以互相交流借鉴。

474ec8cc08694461b3eace0f27afee98.png

与伙伴们共勉!

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22972.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Go实战 | 电商平台】(4) 用户注册

文章目录 1. 编写路由2. 注册路由3. 注册接口3.1 service层3.2 api层3.2 serializer 4. 注册服务 用到的包 github.com/gin-contrib/sessions github.com/gin-contrib/sessions/cookie github.com/gin-gonic/gin 1. 编写路由 新建一个WSGI应用程序实例。 r : gin.Default(…

Vue电商项目--登录与注册

登录注册静态组件 刚刚报了一个错误&#xff0c;找不到图片的资源 assets文件夹--放置全部组件共用静态资源 在样式当中也可以使用符号【src别名】。切记在前面加上 注册业务上 先修改原先的接口成这个按钮 然后把input框里面的数据保存到data中 注册业务下 就是点击获…

C++面经

编译、链接与库编译单文件编译多文件编译 动态链接与静态链接静态链接动态链接 面向对象c⾯向对象 三大特性封装继承多态静态多态&#xff08;模板或重载&#xff09;动态多态&#xff08;面向对象、继承、多态、虚函数&#xff09; 面向对象和面向过程语言的区别面向过程面向对…

GPT-4,究竟强大在哪里?

2023年3月15日&#xff0c;OpenAI向全世界进行了GPT-4的发布会&#xff0c;整个世界都为之沸腾了。GPT-4究竟是有多厉害&#xff1f;为什么能造成这么大的影响&#xff1f;今天小灰来仔细讲解一下。 基础配置 先说说基础配置&#xff0c;之前小灰分享过&#xff0c;GPT-3.5有17…

【EasyPoi实战系列】Spring Boot集成EasyPoi - 第467篇

历史文章&#xff08;文章累计460&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 6…

解密Prompt系列1. Tunning-Free Prompt:GPT2 GPT3 LAMA AutoPrompt

借着ChatGPT的东风&#xff0c;我们来梳理下prompt范式的相关模型。本系列会以A Systematic Survey of Prompting Methods in Natural Language Processing这篇综述为基础&#xff0c;分门别类的整理下这几年比较有代表性的prompt模型。或许你还以其他形式看到过prompt概念&…

未来式人工智能教育在国内的现状

无论是高空户外还是深海水下&#xff0c;或者火灾、地震现场&#xff0c;危险环境让身处其中的工作人员面临巨大威胁。而正在兴起的特种机器人&#xff0c;有望代替人类&#xff0c;在危险现场完成任务。格物斯坦表示&#xff1a;特种机器人&#xff0c;是机器人的一个重要分支…

chatgpt赋能python:Python如何隐藏进程

Python如何隐藏进程 介绍 进程是指运行中的程序在操作系统中的一个实例。在计算机系统中&#xff0c;进程通常都可以被用户或者其他程序所看到。然而&#xff0c;有时候我们需要隐藏进程&#xff0c;比如保护敏感信息或者防止恶意攻击。 Python是一种高级编程语言&#xff0…

UP主高薪裸辞转型独立开发者;LLM权威学习路线图;游戏开发最全AI工具盘点;LOGO制作保姆教程 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; Hugging Face 全球开源AI游戏开发挑战赛&#xff0c;7月8日开始 Open Source AI Game Jam 是 Hugging Face 举办的首场开源游戏开发挑…

ChatGPT到底是什么,带领大家详细解读!

前言 ChatGPT的强大程度相信很多同学都已经体验过了&#xff0c;无论是编写文章&#xff0c;问答&#xff0c;写代码展现除了非常惊艳的能力。一定喜欢技术的同学一定好奇&#xff0c;ChatGPT是如何做到“全知全能”&#xff0c;即会写文章&#xff0c;又会表达总结&#xff0…

IDE + ChatGPT,这款编辑器真的做到可以自动写代码了!

介绍 Cursor 是集成了 GPT-4 的 IDE 工具&#xff0c;目前免费并且无需 API Key&#xff0c;支持 Win、Mac、Linux 平台&#xff0c;可以按要求生成代码&#xff0c;或者让 AI 帮助优化代码&#xff0c;分析代码。Cursor目前已经集成了openai的GPT-4&#xff0c;它或将彻底改变…

CSDN周赛第30期题目解析(天然气定单、小艺读书、买苹果、圆桌)

CSDN周赛第30期&#xff0c;我应试成绩“0”分。试着对天然气定单、小艺读书、买苹果&#x1f34e;、圆桌四个题目&#xff0c;完成算法解析。 (本文获得CSDN质量评分【91】) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖…

猿人学逆向比赛第四题-gRPC题解 | Go版本

大家好&#xff0c;我是TheWeiJun&#xff0c;欢迎来到我的公众号。在现代互联网中&#xff0c;某些网站、App会使用gRPC进行数据传输&#xff0c;以加强数据的安全性和保密性。然而&#xff0c;逆向加密算法并不是一件简单的事情。本文将探讨如何逆向猿人学App的gRPC协议&…

ChatGPT 扩展来自动化你的生活

除非您一直生活在岩石下&#xff0c;否则您可能知道 ChatGPT 如何改变业务以及我们的工作和沟通方式。您只需访OpenAI 的网站即可解锁 ChatGPT 的强大功能。 但是&#xff0c;如果我们不仅可以在其官方网站上使用 ChatGPT&#xff0c;还可以在 微信、Excel、Word 以及更多地方使…

chatGPT的到来,是否意味新时代的来临

chatGPT是一种人工智能技术驱动的自然语言处理工具&#xff0c;是一种基于语言对话场景的语言模型&#xff0c;它使用了Transformer神经网络架构&#xff0c;也是GPT-3.5架构&#xff0c;功能具备上知天文下知地理&#xff0c;还可以进行撰写邮件、视频脚本、文案、翻译、代码等…

windows的软件能在鸿蒙系统运行吗,如果鸿蒙系统能不能兼容windows的所有应用软件,会让你惊喜吗...

如果华为能够让鸿蒙系统兼容Windows系统上所有的应用&#xff0c;那华为鸿蒙系统可能已经超脱时代了。 你得知道在两个不同平台&#xff0c;硬件和内核不同的情况下&#xff0c;华为如果想兼容所有的平台&#xff0c;可能所花费的人力&#xff0c;财力会更巨大。我们知道鸿蒙系…

为什么鸿蒙内核是安卓,鸿蒙系统发布,为什么有人说其为安卓换壳?

2021年4月&#xff0c;鸿蒙系统内测版正式面向消费者开放&#xff0c;而我由于在校读书也变没有时间去专门去进行鸿蒙系统的深度体验只是回来后简单的体验一下 首先我要说的是-鸿蒙它……不是安卓套壳&#xff01;&#xff01;&#xff01;我之前在评论区经常看见有人说鸿蒙就是…

华为p10 鸿蒙,全面上线!华为鸿蒙新消息传来,这是要彻底替换安卓

自从手机出现后&#xff0c;手机操作系统就掌握在少数几个厂商手中&#xff0c;在功能机时代&#xff0c;诺基亚几乎掌控了塞班系统&#xff0c;而微则掌握Windows mobie系统。 苹果开启智能手机时代后&#xff0c;手机系统主要被苹果和谷歌掌控。其中&#xff0c;苹果的IOS系统…

鸿蒙OS到底是不是Android套皮?(不多说,看源码!)

人生就像一场旅行&#xff0c;不必在乎目的地。在乎的&#xff0c;是沿途的风景以及看风景的心情。 #正文 某人曾说「没有调查就没有发言权」 最近鸿蒙系统关注度好高&#xff0c;支持与反对、看好和看衰、「自主的全场景分布式系统」和「Android套壳」各执一词&#xff0c;吵…

鸿蒙会干掉安卓吗?刚刚 ,首款搭载华为鸿蒙OS终端正式亮相!

点击“开发者技术前线”&#xff0c;选择“星标?” 13&#xff1a;21 在看|星标|留言, 真爱 编辑&#xff1a;可可| 来源&#xff1a;华为&#xff0c;创业邦 8月9日&#xff0c;也就是昨天下午&#xff0c;华为鸿蒙OS终于揭开了面纱。 8月10日下午&#xff0c;在华为开发者大…