模拟QQ登录-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)

这篇具有很好参考价值的文章主要介绍了模拟QQ登录-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【案例11-3】 模拟QQ登录

【案例介绍】

1.案例描述

QQ是现实生活中常用的聊天工具,QQ登录界面看似小巧、简单,但其中涉及的内容却很多,对于初学者练习Java Swing工具的使用非常合适。本案例要求使用所学的Java Swing知识,模拟实现一个QQ登录界面。

2.运行结果

模拟QQ登录-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)

 

运行结果

【案例分析】

(1)首先,需要定义一些成员变量,如最小化、关闭、账号、密码、头像等,方便响应的逻辑实现。

(2)由于需要对账号、密码、头像等进行布局,故需要先对这些对象进行实例化。

(3)在对需要用到的文本框、图片等对象进行实例化过后,可以使用对象.setBounds()设置文本框、图片等组件的位置。

(4)接下来,对最小化、关闭、账号、密码、头像等添加监听事件。同时,对窗体也添加窗体拖动监听事件。

(5)最后,为最小化、关闭等编写点击时的执行逻辑。为账号、密码等设置点击、悬停等执行逻辑。

【案例实现】

Login.java

  1. package chapter1103;
  2. import java.awt.Color;
  3.     import java.awt.Cursor;
  4.     import java.awt.Font;
  5.     import java.awt.Point;
  6.     import java.awt.Toolkit;
  7.     import java.awt.event.FocusEvent;
  8.     import java.awt.event.FocusListener;
  9.     import java.awt.event.MouseEvent;
  10.     import java.awt.event.MouseListener;
  11. import java.awt.event.MouseMotionListener;
  12. import javax.swing.ImageIcon;
  13. import javax.swing.JFrame;
  14. import javax.swing.JLabel;
  15. import javax.swing.JOptionPane;
  16. import javax.swing.JPanel;
  17. import javax.swing.JPasswordField;
  18. import javax.swing.JTextField;
  19. public class Login extends JFrame implements MouseListener {
  20.     JLabel bacgrangd, jan,bi,QQ,qq,tu;//gif,最小化,关闭,logo,QQ,头像
  21.     JLabel an1, an2, lie1, lie2;// 暗色块|线
  22.     JTextField user;// 账号
  23.     JPasswordField pass;// 密码
  24.     JPanel bgcolor;//
  25.     JLabel su1, mi1, ku1, ku2, gou1, gou2;// 缩略图
  26.     JLabel text1, text2, text3, text4, text5;//自动登录,记住密码,找回
  27. //密码,注册账号,登录
  28.     static Point origin = new Point();// 变量,用于可拖动窗体
  29.     int a = 0, b = 0, c = 0, d = 0;// 控制线
  30.     int f = 0, g = 0, h = 0, j = 0;// 控制√
  31.     JLabel submit, ma;// 背景
  32.     public Login() {
  33.         //实例化
  34.         bacgrangd = new JLabel(new ImageIcon("images/1.gif"));
  35.         jan = new JLabel(new ImageIcon("images/最小化.png"));
  36.         bi = new JLabel(new ImageIcon("images/关闭.png"));
  37.         QQ = new JLabel(new ImageIcon("imagesqq.png"));
  38.         qq = new JLabel("QQ");
  39.         an1 = new JLabel();
  40.         an2 = new JLabel();// 暗调
  41.         tu = new JLabel(new ImageIcon("images/头像.png"));
  42.         user = new JTextField();
  43.         pass = new JPasswordField();
  44.         su1 = new JLabel(new ImageIcon("images/qq (1).png"));
  45.         mi1 = new JLabel(new ImageIcon("images/密码.png"));
  46.         lie1 = new JLabel(new ImageIcon("images/直线2.png"));
  47.         lie2 = new JLabel(new ImageIcon("images/直线2.png"));
  48.         bgcolor = new JPanel();
  49.         ku1 = new JLabel(new ImageIcon("images/框框.png"));
  50.         ku2 = new JLabel(new ImageIcon("images/框框.png"));
  51.         gou1 = new JLabel(new ImageIcon("images/对勾.png"));
  52.         gou2 = new JLabel(new ImageIcon("images/对勾.png"));
  53.         text1 = new JLabel("自动登录");
  54.         text2 = new JLabel("记住密码");
  55.         text3 = new JLabel("找回密码");
  56.         text4 = new JLabel("注册账号");
  57.         text5 = new JLabel("登录");
  58.         submit = new JLabel();
  59.         ma = new JLabel(new ImageIcon("images/二维码.png"));
  60.         //位置
  61.         bacgrangd.setBounds(-35, -123, 500, 250);
  62.         jan.setBounds(364, 2, 32, 32);
  63.         bi.setBounds(396, 3, 32, 32);
  64.         QQ.setBounds(10, 10, 32, 32);
  65.         qq.setBounds(50, 5, 45, 45);
  66.         an1.setBounds(361, 0, 35, 35);
  67.         an2.setBounds(395, 0, 35, 35);
  68.         tu.setBounds(170, 80, 90, 85);
  69.         user.setBounds(130, 160, 180, 40);
  70.         pass.setBounds(130, 200, 180, 40);
  71.         su1.setBounds(100, 170, 20, 20);
  72.         mi1.setBounds(100, 210, 20, 20);
  73.         lie1.setBounds(100, 190, 240, 10);
  74.         lie2.setBounds(100, 230, 240, 10);
  75.         bgcolor.setBounds(0, 125, 500, 300);
  76.         ku1.setBounds(100, 250, 20, 20);
  77.         ku2.setBounds(190, 250, 20, 20);
  78.         gou1.setBounds(106, 255, 10, 10);
  79.         gou2.setBounds(196, 255, 10, 10);
  80.         text1.setBounds(125, 250, 80, 20);
  81.         text2.setBounds(215, 250, 80, 20);
  82.         text3.setBounds(288, 250, 80, 20);
  83.         text4.setBounds(15, 300, 80, 20);
  84.         text5.setBounds(206, 285, 80, 20);
  85.         submit.setBounds(100, 280, 242, 35);
  86.         ma.setBounds(385, 290, 30, 30);
  87.         //属性
  88.         qq.setFont(new Font("微软雅黑", 1, 25));
  89.         qq.setForeground(Color.white);
  90.         an1.setBackground(new Color(0, 0, 0, 0.3f));
  91.         an2.setBackground(new Color(0, 0, 0, 0.3f));
  92.         bgcolor.setBackground(new Color(255, 255, 255));
  93.         user.setForeground(Color.gray);
  94.         user.setText("QQ号码/手机/邮箱");
  95.         user.setOpaque(false);// 透明背景
  96.         user.setBorder(null);// 去掉边框
  97.          // 框内文字样式
  98.         user.setFont(new Font("微软雅黑", Font.PLAIN, 16));
  99.          // 框内文字样式
  100.         pass.setFont(new Font("微软雅黑", Font.PLAIN, 16));
  101.         pass.setBorder(null);// 去掉边框
  102.         pass.setOpaque(false);// 透明背景
  103.         pass.setForeground(Color.gray);
  104.         pass.setText("密码");
  105.         pass.setEchoChar((char) 0);// 让密码显示出来
  106.         text1.setFont(new Font("微软雅黑", 0, 12));
  107.         text2.setFont(new Font("微软雅黑", 0, 12));
  108.         text3.setFont(new Font("微软雅黑", 0, 12));
  109.         text4.setFont(new Font("微软雅黑", 0, 12));
  110.         text5.setFont(new Font("微软雅黑", 0, 15));
  111.         text1.setForeground(new Color(170, 170, 170));
  112.         text2.setForeground(new Color(170, 170, 170));
  113.         text3.setForeground(new Color(170, 170, 170));
  114.         text4.setForeground(new Color(170, 170, 170));
  115.         text5.setForeground(Color.white);
  116.         gou1.setVisible(false);
  117.         gou2.setVisible(false);
  118.         submit.setBackground(new Color(5, 186, 251));
  119.         submit.setOpaque(true);
  120.      text3.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
  121.      text4.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
  122.         //事件区域
  123.         jan.addMouseListener(this);
  124.         bi.addMouseListener(this);
  125.         user.addMouseListener(this);
  126.         pass.addMouseListener(this);
  127.         text1.addMouseListener(this);
  128.         text2.addMouseListener(this);
  129.         text3.addMouseListener(this);
  130.         text4.addMouseListener(this);
  131.         ku1.addMouseListener(this);
  132.         ku2.addMouseListener(this);
  133.         submit.addMouseListener(this);
  134.         ma.addMouseListener(this);
  135.         this.addMouseListener(this);
  136.          // 窗体拖动事件
  137.  this.addMouseMotionListener(new MouseMotionListener() {
  138.            public void mouseMoved(MouseEvent e) {
  139.         }
  140.     public void mouseDragged(MouseEvent e) {
  141.        Point p = getLocation();
  142.         setLocation(p.x + e.getX()-origin.x, p.y + e.getY()-origin.y);
  143.     }
  144. });
  145. user.addFocusListener(new FocusListener() {
  146.      public void focusLost(FocusEvent e) {// 失去焦点
  147.          su1.setIcon(new javax.swing.ImageIcon("images/qq (1).png"));
  148.          lie1.setIcon(new javax.swing.ImageIcon("images/直线2.png"));
  149.              c = 0;
  150.               // 判断是否为空(为了设置默认提示语)
  151.              if (user.getText().isEmpty()) {
  152.                    user.setForeground(Color.gray);
  153.                    user.setText("QQ号码/手机/邮箱");
  154.                }
  155.            }
  156.         // 得到焦点
  157.        public void focusGained(FocusEvent e) {
  158.          user.setForeground(Color.black);
  159.          lie1.setIcon(new javax.swing.ImageIcon("images/直线3.png"));
  160.                a = 1;
  161.                c = 1;
  162.                b = 0;
  163.           su1.setIcon(new javax.swing.ImageIcon("images/qq(2).png"));
  164.                if (user.getText().equals("QQ号码/手机/邮箱")) {
  165.                    user.setText("");
  166.                } else {
  167.                    user.setText(user.getText());
  168.                    user.selectAll();
  169.                }
  170.            }
  171.         });
  172.         pass.addFocusListener(new FocusListener() {
  173.             // 失去焦点
  174.            public void focusLost(FocusEvent e) {
  175.             // 失去焦点换图片
  176.            lie2.setIcon(new javax.swing.ImageIcon("images/2.png"));
  177.            mi1.setIcon(new javax.swing.ImageIcon("images/密码.png"));
  178.                d = 0;
  179.                if (pass.getText().isEmpty()) {
  180.                    pass.setForeground(Color.gray);
  181.                    pass.setText("密码");
  182.                    pass.setEchoChar((char) 0);// 让密码显示出来
  183.                }
  184.            }
  185.         public void focusGained(FocusEvent e) {// 得到焦点
  186.                mi1.setIcon(new javax.swing.ImageIcon("images/密码"+
  187.                   " (1).png"));
  188.                lie2.setIcon(new javax.swing.ImageIcon("images/直线"+
  189.                   "3.png"));
  190.                b = 1;
  191.                a = 0;
  192.                d = 1;
  193.                pass.setForeground(Color.black);
  194.                pass.setEchoChar('*');// 让用户输入看不见
  195.                if (pass.getText().equals("密码")) {
  196.                    pass.setText("");
  197.                } else {
  198.                    pass.setText(pass.getText());
  199.                }
  200.            }
  201.         });
  202.         this.setLayout(null);// 布局
  203.         this.add(jan);
  204.         this.add(bi);
  205.         this.add(qq);
  206.         this.add(QQ);
  207.         this.add(an1);
  208.         this.add(an2);
  209.         this.add(tu);
  210.         this.add(lie1);
  211.         this.add(lie2);
  212.         this.add(user);
  213.         this.add(pass);
  214.         this.add(su1);
  215.         this.add(mi1);
  216.         this.add(gou1);
  217.         this.add(gou2);
  218.         this.add(ku1);
  219.         this.add(ku2);
  220.         this.add(text1);
  221.         this.add(text2);
  222.         this.add(text3);
  223.         this.add(text4);
  224.         this.add(text5);
  225.         this.add(submit);
  226.         this.add(ma);
  227.         this.add(bgcolor);
  228.         this.add(bacgrangd);
  229.         this.setSize(430, 330);
  230. this.setIconImage(Toolkit.getDefaultToolkit().createImage("images"+
  231.     "/透明照片.png"));// 窗体图标
  232.         this.setLocationRelativeTo(null);// 保持居中
  233.         this.setUndecorated(true);// 去顶部
  234.         this.setFocusable(true);// 面板首先获得焦点
  235.         this.setBackground(new Color(255, 255, 255));// 背景颜色
  236.         this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
  237.         this.setAlwaysOnTop(true);// 最顶层
  238.         this.setVisible(true);// 显示
  239.     }
  240.     public static void main(String[] args) {
  241.         new Login();
  242.     }
  243.     // 点击不恢复
  244.     public void mouseClicked(MouseEvent e) {
  245.     }
  246.     // 点击后
  247.     public void mousePressed(MouseEvent e) {
  248.         if (e.getSource() == jan) {
  249.            setExtendedState(JFrame.ICONIFIED);
  250.         } else if (e.getSource() == this) {
  251.            origin.x = e.getX();
  252.            origin.y = e.getY();
  253.         } else if (e.getSource() == bi) {
  254.            System.exit(0);
  255.         } else if (e.getSource() == ku1 || e.getSource() == text1) {
  256.            if (f == 0) {
  257.                gou1.setVisible(true);
  258.                g = 1;
  259.                f = 1;
  260.            } else if (g == 1) {
  261.                gou1.setVisible(false);
  262.                f = 0;
  263.                g = 0;
  264.            }
  265.         } else if (e.getSource() == ku2 || e.getSource() == text2) {
  266.            if (h == 0) {
  267.                gou2.setVisible(true);
  268.                j = 1;
  269.                h = 1;
  270.            } else if (j == 1) {
  271.                gou2.setVisible(false);
  272.                h = 0;
  273.                j = 0;
  274.             }
  275.       } else if (e.getSource() == submit || e.getSource() == text5) {
  276.            text5.setFont(new Font("微软雅黑", 0, 14));
  277.            dispose();
  278.            String users = user.getText();
  279.            String password = pass.getText();
  280.            if (users.equals("itcast") && password.equals("123")) {
  281.            //new Table();//打开新的主界面如果要关闭登录界面可以写dispose();
  282.            } else {
  283.            JOptionPane.showMessageDialog(null, "用户名:itcast,密"+
  284.                    "码:123,您并未设置打开界面!");
  285.                new Login();
  286.            }
  287.         }
  288.     }
  289.      // 点击时
  290.     public void mouseReleased(MouseEvent e) {
  291.         if (e.getSource() == submit || e.getSource() == text5) {
  292.            text5.setFont(new Font("微软雅黑", 0, 15));
  293.         }
  294.     }
  295.      // 悬停
  296.     public void mouseEntered(MouseEvent e) {
  297.         if (e.getSource() == jan) {
  298.            an1.setOpaque(true);
  299.         } else if (e.getSource() == bi) {
  300.            an2.setOpaque(true);
  301.         } else if (e.getSource() == user) {
  302.            if (a == 0 && c == 0) {
  303.          lie1.setIcon(new javax.swing.ImageIcon("images/直线4.png"));
  304.            }
  305.         } else if (e.getSource() == pass) {
  306.            if (b == 0 && d == 0) {
  307.          lie2.setIcon(new javax.swing.ImageIcon("images/直线4.png"));
  308.            }
  309.         } else if (e.getSource() == text3) {
  310.            text3.setForeground(Color.GRAY);
  311.         } else if (e.getSource() == text4) {
  312.            text4.setForeground(Color.GRAY);
  313.         } else if (e.getSource() == ma) {
  314.           ma.setIcon(new javax.swing.ImageIcon("images/二维码2.png"));
  315.         }
  316.     }
  317.     public void mouseExited(MouseEvent e) {// 悬停后
  318.         if (e.getSource() == jan) {
  319.            an1.setOpaque(false);
  320.         } else if (e.getSource() == bi) {
  321.            an2.setOpaque(false);
  322.         } else if (e.getSource() == user) {
  323.            if (a == 0) {
  324.          lie1.setIcon(new javax.swing.ImageIcon("images/直线2.png"));
  325.            }
  326.         } else if (e.getSource() == pass) {
  327.            if (b == 0) {
  328.          lie2.setIcon(new javax.swing.ImageIcon("images/直线2.png"));
  329.            }
  330.         } else if (e.getSource() == text3) {
  331.            text3.setForeground(new Color(170, 170, 170));
  332.         } else if (e.getSource() == text4) {
  333.            text4.setForeground(new Color(170, 170, 170));
  334.         } else if (e.getSource() == ma) {
  335.            ma.setIcon(new javax.swing.ImageIcon("images/二码.png"));
  336.         }
  337.     }
  338. }

上述代码中,第19-30行代码,定义了一些成员变量,方便响应的逻辑实现。第33-58行代码,对一些图片对象进行实例化。第60-85行,设置图片、文本框等的位置。第87-120行,设置各个文本框,文字等的样式。第122-134行,为各个文本框、按钮等设置监听事件。第136-143行,为窗体拖动事件设置窗体监听。第144-170,为账号文本框设置鼠标聚焦事件。第171-200,为密码文本框设置鼠标聚焦事件。第201-227行,将各个按钮,图片文本框对象放入容器内。第228-238,对界面进行布局。mouseClicked()方法中编写了按钮,文本框,文字等点击不回复的逻辑。mousePressed()方法中编写了按钮,文本框,文字等点击后的逻辑。mouseReleased()方法中编写了按钮,文本框,文字等点击时的逻辑。mouseEntered()方法中编写了按钮,文本框,文字等悬停时的逻辑。mouseExited()方法中编写了按钮,文本框,文字等悬停后的逻辑。文章来源地址https://www.toymoban.com/news/detail-479671.html

到了这里,关于模拟QQ登录-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图书管理系统登录页面--课后程序(Python程序开发案例教程-黑马程序员编著-第12章-课后作业)

    登录与注册是程序中最基本的模块。用户只有登录成功后,才可以使用应用系统中的全部功能。若用户没有登录账号,可通过注册界面设置登录账号信息。某图书管理系统的登录窗口如图1所示。   登录界面 图1的窗口中包含用户名、密码、验证码、登录、注册、退出。当用户

    2024年02月03日
    浏览(47)
  • 黑马程序员《PHP基础案例教程》第2版课后练习—第03章

    答案均参考教材官方发布的PPT,以下是下载PPT的页面 人民邮电出版社教育社区:PHP基础案例教程(第2版)-图书-人邮教育社区 1、定义函数使用的为(function)。 2、用于对字符串中的某些字符进行替换操作的函数是(str_replace())。 3、使用(strlen())函数可以获取字符

    2024年01月18日
    浏览(46)
  • Java模拟QQ登录界面(GUI)

    链接: https://pan.baidu.com/s/13JJFyg14CbShs_HzLAoW6w?pwd=pwu3 提取码: pwu3  对每个文本框进行监控,鼠标定在哪的时候,下边框变为蓝色 用户光标定到文本框的时候,要是没有输入信息,就把里面的提示文字给清除掉,给用户一个好的体验 登录的时候对账号和密码检验,要是账号和密码都是ad

    2024年02月03日
    浏览(38)
  • 井字棋--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)

    井字棋是一种在3 * 3格子上进行的连珠游戏,又称井字游戏。井字棋的游戏有两名玩家,其中一个玩家画圈,另一个玩家画叉,轮流在3 * 3格子上画上自己的符号,最先在横向、纵向、或斜线方向连成一条线的人为胜利方。如图1所示为画圈的一方为胜利者。   图1 井字棋 本实

    2024年02月04日
    浏览(51)
  • 刮刮乐--课后程序(Python程序开发案例教程-黑马程序员编著-第4章-课后作业)

    刮刮乐的玩法多种多样,彩民只要刮去刮刮乐上的银色油墨即可查看是否中奖。每张刮刮乐都有多个兑奖区,每个兑奖区对应着不同的获奖信息,包括“一等奖”、“二等奖”、“三等奖”和“谢谢惠顾”。假设现在有一张刮刮乐,该卡片上面共有8个刮奖区,每个刮奖区对应

    2024年02月06日
    浏览(84)
  • 纯JAVA模拟、实现QQ简易聊天互动程序

    实现的功能、步骤: 1、定义JFrame窗体中的组件 2、在构造方法中初始化窗体的组件 3、使用网络编程完成数据的传输(TCP,UDP协议) 4、实现发送按钮的监听点击事件 5、实现回车键发送数据   功能演示: 没有点发送,数据却发送出去了是因为按了回车键   运用到的知识点

    2024年02月11日
    浏览(33)
  • 逢七拍手游戏--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)

    逢7拍手游戏的规则是:从1开始顺序数数,数到有7或者包含7的倍数的时候拍手。本实例要求编写程序,模拟实现逢七拍手游戏,输出100以内需要拍手的数字。 掌握for循环与range()函数的使用 掌握字符串中find()方法的使用 判断一个数字是否与7相关,可分为两种情况: 1.是否为

    2024年02月06日
    浏览(66)
  • 银行管理系统--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)

    从早期的钱庄到现如今的银行,金融行业在不断地变革;随着科技的发展、计算机的普及,计算机技术在金融行业得到了广泛的应用。银行管理系统是一个集开户、查询、取款、存款、转账、锁定、解锁、退出等一系列的功能的管理系统,该系统中各功能的介绍如下。 开户功

    2024年02月04日
    浏览(47)
  • 手机通讯录--课后程序(Python程序开发案例教程-黑马程序员编著-第5章-课后作业)

    通讯录是记录了联系人姓名和联系方式的名录,手机通讯录是最常见的通讯录之一,人们可以在通讯录中通过姓名查看相关联系人的联系方式、邮箱、地址等信息,也可以在其中新增联系人,或修改、删除联系人信息。下面是一个常见通讯录的功能菜单,如图1所示。   图1

    2024年02月01日
    浏览(53)
  • 加油优惠价格计算-课后程序(JavaScript前端开发案例教程-黑马程序员编著-第2章-课后作业)

    一、案例描述 考核知识点 if 、 if…else 、if…else if…else 练习目标 掌握if单分支语句。 掌握if…else双分支语句 掌握if…else if…else多分支语句 需求分析 加油站,为了鼓励车主多加油,实行多加多优惠政策,具体优惠如下: 已知92号汽油,每升6元;如果大于等于20升,那么每

    2024年02月07日
    浏览(87)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包