素材获取可关注微信公众号:开源IT,后台回复 "素材" 免费获取。

上次把QQ界面的主题框架实现了,但是还没有完成最小化,关闭按钮等的功能,这次重新完善了QQ登录界面的功能,本次更新主要有以下几个方面:

1.最小化,关闭窗口功能以及实现这两个图标的鼠标移动事件(类似大多数软件,当把鼠标光标移到这两个图标的区域时,图标会有渐变效果,点击时有点击效果);

2.登录按钮的鼠标响应事件,以及点击时的阴影效果;

3.密码框的明文提示,账号框的明文提示;

4.账号和密码框的鼠标响应事件,以及“注册账号”和“忘记密码”的鼠标响应事件

5.窗体的拖动事件

总的来说,这次的重点就在于实现鼠标事件的监听功能,现在先上效果图:

   

看了自己录制的gif图,感觉失真程度太大,于是又加了一张静态图来做对比,现在来解析实现方法:

  1.最小化和关闭的功能实现:

事先准备三张图片,分别表示鼠标进入该区域,离开该区域和点击该区域的状态,然后实现鼠标点击事件,每次不同的状态就插入不同的图片。这里只贴出这部分的实现代码,后面的相似的就不累赘了:

     /*** 实现点击×退出的时间,注意将×放到面板的上一层*/close_label.setBounds(397, 0, 23, 23);panel_north.add(close_label,0);close_label.addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent e) {ImageIcon icon_close = new ImageIcon("images/closeback_2.gif");close_label.setIcon(icon_close);System.out.println("点击");}public void mouseExited(MouseEvent e) {ImageIcon icon_close = new ImageIcon("images/common.gif");close_label.setIcon(icon_close);System.out.println("不显示");}public void mouseEntered(MouseEvent e) {ImageIcon icon_close = new ImageIcon("images/closeback_1.gif");close_label.setIcon(icon_close);close_label.setToolTipText("关闭窗口");System.out.println("显示");}public void mouseClicked(MouseEvent e){System.out.println("系统退出");System.exit(0);}});/*** 实现点击最小化功能*/min_label.setBounds(371, 0, 23, 23);panel_north.add(min_label,0);min_label.addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent e) {ImageIcon icon_close = new ImageIcon("images/minback2.gif");min_label.setIcon(icon_close);System.out.println("点击");}public void mouseExited(MouseEvent e) {ImageIcon icon_close = new ImageIcon("images/common.gif");min_label.setIcon(icon_close);System.out.println("不显示");}public void mouseEntered(MouseEvent e) {ImageIcon icon_close = new ImageIcon("images/minback1.gif");min_label.setIcon(icon_close);min_label.setToolTipText("最小化窗口");System.out.println("显示");}public void mouseClicked(MouseEvent e){LoginWindow.this.setExtendedState(JFrame.ICONIFIED);System.out.println("程序最小化");}});

在这里有几点需要注意:一是在添加最小化,关闭按钮的图标时,在add方法中要设置添加的层数,因为我们看到的界面是一层一层的,如果直接添加的话会被背景图片覆盖,就不能正确显示小图标;二是这里的图标的背景是设置成透明的,所以在界面中的图片是经过PS的处理,具体如何使用PS制作透明背景,百度上很多教程。

2.密码框和账号框的鼠标响应事件,” 注册账号 ”和“ 忘记密码 ”的变色效果:

实现方法也是通过添加对鼠标的监听来给文本框设置不同的边框颜色,和上面最小化功能差不多,就不上代码了。

3.密码框的明文显示:

这里密码框设置的组件是JPassWordField,如果直接用setText方法给它设置提示内容的话,会显示成“ * ”,这样就达不到提示的效果,我们可以看到java源码中提供了setEchoChar方法来实现这个功能,

通过源码知道,可以通过将setEchoChar的参数设置成0就可以实现密码框的明文显示,至于具体字体样式就看个人的爱好了。注意,这个方法不支持int型数值,所以0需要进行强制类型转换成char类型才可以,说到这里,我们可以想到许多注册的页面有提供预览密码的功能,知道了这个功能之后,我们也可以实现一个预览密码的功能。下次有机会再更新来实现这个功能吧......

4.无边框窗口的拖动:

java swing中的窗口都有最大化,最小化,关闭图标以及一个外边框,但是这个是影响美观的,这里把外边框隐藏了,但是随之而来的是窗口的拖动功能也没了。所以需要自己来实现一个拖动功能。主要思路就是:获得鼠标Press时的相对JFrame的坐标,然后在mouseDragged方法中获得那点相对屏幕的坐标,然后用相对屏幕的坐标减去相对JFrame的坐标,最后用setLocation 设置它的位置就OK了。具体代码如下:

                 /*** 实现拖拽窗口的功能*/this.addMouseListener(new MouseAdapter(){public void mousePressed(MouseEvent e) {xOld = e.getX();   //记录鼠标按下时的坐标yOld = e.getY();}public void mouseClicked(MouseEvent e){MainFrame.this.setExtendedState(JFrame.ICONIFIED);}});this.addMouseMotionListener(new MouseAdapter() {public void mouseDragged(MouseEvent e) {int xOnScreen = e.getXOnScreen();int yOnScreen = e.getYOnScreen();int xNew = xOnScreen - xOld;int yNew = yOnScreen - yOld;System.out.println("xx="+xNew+"yy="+yNew);MainFrame.this.setLocation(xNew, yNew);  //设置拖拽后,窗口的位置System.out.println("QQ正在移动");}});

这里附上一张拖动窗口的原理图:

好了,这次差不多已经把所有的功能实现原理都写完了,下次将会继续更新QQ主界面的制作以及一些对数据库的操作,如登录,注册,获取联系人列表等功能。

Swing学习----------QQ登录界面制作(二)相关推荐

  1. Swing学习----------QQ登录界面制作(一)

    素材获取可关注微信公众号:开源IT,后台回复 "素材" 免费获取. 最近学习的课程有点紧,所以暂时放下了SSH的学习,等时间稍微松点再开始SSH博客的跟进.在这个学期的JAVA课程 ...

  2. java仿qq登录 界面设计,Java Swing仿QQ登录界面效果

    本文实例为大家分享了Java Swing仿QQ登录界面展示的具体代码,供大家参考,具体内容如下 闲来无事将早些时候已实现的QQ登录界面再实现了一遍,纯手工打造(意思是没有用NetBeans.MyEcl ...

  3. java如何引入qq登陆,Java Swing仿QQ登录界面 学习之用

    闲来无事将早些时候已实现的QQ登录界面再实现了一遍,纯手工打造(意思是没有用NetBeans.MyEclipse的拖动功能). 源代码如下: package ibees.qq; import java ...

  4. PyQt5教程(八)——实现QQ登录界面(二、加载资源文件)

                                         实现QQ登录界面--加载资源文件 一.创建资源文件: 上篇文章创建了QQ登录界面,本篇介绍创建并加载资源文件. 1.创建资源文 ...

  5. java swing qq_使用java swing实现qq登录界面示例分享

    用Java Swing做的一个QQ登录界面 import java.awt.Container; import java.awt.Image; import java.awt.event.Action ...

  6. QQ登录界面模仿和事件监听(下)

    我们到了QQ登录界面模仿这个环节了. 当开始做一个小小的程序的时候,就发现事件监听的无处不在.因为如果让一个程序有能动性,人使用时根据需要程序也能做出相应的反应,很多时候都要使用事件监听. (当时俺的 ...

  7. Qt5学习笔记之QQ登录界面一:制作界面

    目录 概述 步骤 概述 B站发现这个QT教程视频,看了两集感觉讲的不错,上手挺简单.之前也接触过QT,一来是工作中用不到,没有动力.二来看到一堆的函数就头大记不住,什么设置起始坐标.居中.标题等等.没 ...

  8. JavaSwing仿QQ登录界面,注释完善,适合新手学习

    使用说明: 这是一个java做的仿制QQ登录界面,界面仅使用一个类, JDK版本为jdk-11 素材包的名字为:素材(下载)请在项目中新建一个名字为"素材"的文件夹. 素材: ht ...

  9. java gui界面设计qq_Java swing界面开发(仿QQ登录界面)

    首先引入包的概念,包:给代码分类,提高的了代码的可读性,封装后方便管理.在包中类的引入:import 包名.类名;包名需小写,多单词用"."隔开.类名的命名规范:首字母大写其后的每 ...

最新文章

  1. ca 自建 颁发证书_openssl自建CA后颁发证书
  2. 学习《html5.css3.0》网页布局和样式精粹(第一天)
  3. An internal error occurred during: Retrieving archetypes:. GC overhead limit exceeded
  4. datetime 比较_MySQL时间类型datetime,timestamp,int如何选择,很多程序员收藏了
  5. Jquery如何操作Table的某一个td
  6. redis的发布和订阅
  7. 第二章 对象以及变量的并发访问
  8. C语言俄罗斯方块代码(成功版)
  9. 会考计算机考试题,初中信息技术会考试题
  10. 纬度、经度和坐标系网格
  11. 软件分析与测试研讨会,第四届Vector测试专题研讨会
  12. 在线模拟linux终端,linux下tty,控制台,虚拟终端,串口,console(控制台终端)详解...
  13. Bandwagon centos 6 32位配置SVN,apache,mysql和php
  14. 在Qt-Creator中使用搜狗输入中文的最简单解决方法(不需要编译安装)
  15. [SOA介绍]什么是SOA?
  16. OTA (空中下载技术)
  17. opencv 通过标定摄像头测量物体大小_激光三角测量法在工业视觉检测上的应用...
  18. 伦敦银xag是什么意思?
  19. 管理学总论之管理者的角色和技能
  20. [V8]找出可能影响性能的代码(模式)

热门文章

  1. swift-从零开始(1)swift项目的创建
  2. UVA 716 - Commedia dell' arte(三维N数码问题)
  3. DotnetBar控件介绍
  4. 小米笔试题 依据父子关系建树
  5. FreeMaker模板引擎
  6. 此文献给正打算入门大数据的朋友:大数据学习笔记1000条(2)
  7. 韩国医院打造区块链医疗数据平台
  8. java 背景图片自适应_java 背景图片随窗口大小变化进行自动缩放及平铺 | 学步园...
  9. 装系统时提示:无法打开所需文件,错误代码0x8007000D解决方案
  10. ChainStore_2020年已过大半 DeFi热潮还能持续多久?