swing实现QQ登录界面1.0( 实现了同一张图片只加载一次)、(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件)
swing实现QQ登录界面1.0( 实现了同一张图片只加载一次)、(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件)
代码思路分析:
1.(同一张图片仅仅需要加载一次就够了,下次给一个图片路径,如果加载过,就直接拿去用就可以了):我们选择封装在一个工具类里,如何实现同一种图片只加载一次呢?
我们选择了Map集合:
(Map集合的好处就是避免重复,同时Map还有键值对,键:放图片路径(具有唯一性),值:放图片控件。可以通过图片路径获得图片控件)
我们定义了静态的(工具类嘛)Map集合变量,还有静态的获取图片控件的方法
2.实现简单的布局面板添加背景图片控件的标签控件:
思路:我们知道qq登录界面底层布局就是一张背景图片:
我们要做的事情是把背景图片控件添加到标签控件中,再添加到布局控件里。
(1)我们定义一个图片控件变量,通过上面的工具类获取到图片控件。
(2)定义好一个标签控件,创建的时候,把图片控件当作参数传入(设置它的大小是背景图片的大小)
(3)把装了图片控件的标签控件添加到布局控件中。
3.添加一个关闭按钮控件:
(1)定义一个按钮关闭变量,创建的时候,把关闭的图标作为参数传入,(设置一下按钮的边框为null,设置一下按钮的边界,设置一下按钮鼠标靠近时的切换图片呀 等基本的设置)
(2)通过鼠标监听事件来销毁登录界面的对象。
最后整个小项目的代码分析:
qq登录界面逻辑
1.qqDemo 的窗体,进行基本设置:内容面板、标题、加载获取背景图片、窗体大小(与背景图片一样大)、位置居中、退出的模式、(加上去除窗体修饰),窗体可见性.
注意!!先设置完大小,再居中。(先加上去除窗体修饰),再窗体可见性
2.考虑到qq登录界面的底层就是一种背景图片:
(1) 添加一个图片控件变量
(2) 获取图片,为了牛逼一点实现,我们选择通过自定义一个图片工具类ImageUtil,实现获取的图片(同一张图片仅仅需要加载一次就够了,下次给一个图片路径,如果加载过,就直接拿去用就可以了)


(2,1)到这里就可以获取背景图片啦,并且可以设置窗体大小啦
(3) 构造方法的其他组件的初始化封装成一个方法initComponents,避免了直接在构造方法的臃肿。
(4) 获取完背景图片,就要为窗体设置上背景图片:先通过标签控件装上控件,再通过布局面板添加装上了图片控件的的标签控件。

(5) 再做一个关闭的按钮:是因为我们选择了窗体无修饰,关闭有点麻烦。
现定义一个按钮控件变量,然后添加图标,设置边界、去边框+ 鼠标经过时的图标变化。最后通过事件:实现点击关闭按钮来销毁窗体--(选择了Lamdba表达式(把匿名内部类当作参数))

全部代码:
package QQLogin;
public class qqLoginTest {
public static void main(String[] args) {
new QQLoginDesign();
}
}
package QQLogin;
import java.util.HashMap;
import java.util.Map;
import javax.swing.ImageIcon;
/**
* 加载图片工具类,实现加载过的图片可以下次直接获取
* @author
*
*/
public class ImageUtil {
//定义Map集合(键:图片路径, 值 图片控件)
public static Map<String, ImageIcon> mapImage = new HashMap<String, ImageIcon>();
public static ImageIcon getImage(String path) {
//判断图片是否加载过
if(mapImage.containsKey(path)) { //加载过的图片,就直接返回图片控件
return mapImage.get(path);
}
//没有加载过的图片
ImageIcon image = new ImageIcon(path);
mapImage.put(path, image);
return image;
}
}
package QQLogin;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* qq登录界面类
* @author
*
*/
public class QQLoginDesign extends JFrame{
//背景图片控件
private ImageIcon background = null;
//内容面板
private JPanel contentPane = null;
//取消按钮
JButton closeButton = null;
//完成基本的设置工作
public QQLoginDesign() {
//设置窗体标题
setTitle("qq登录界面");
//获取背景图片
background = ImageUtil.getImage("D:\\EclispeProjects\\Demo15\\src\\QQLogin\\qqPhotos\\background.png");
//设置窗体的大小,与背景图片一样大
setSize(background.getIconWidth(), background.getIconHeight());
//设置居中
setLocationRelativeTo(null);
//设置窗体的内容面板
contentPane = (JPanel) getContentPane();
//其余部分的初始化工作,封装成一个函数initComponents
initComponents();
//取消窗体修饰
setUndecorated(true);
//设置窗体的可见性
setVisible(true);
//设置窗体退出的模式
// setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
/**
* 完成窗体的其余部分的初始化工作
*/
private void initComponents() {
// 将内容面板设置无布局
contentPane.setLayout(null);
//设置背景图片
setBackground("D:\\EclispeProjects\\Demo15\\src\\QQLogin\\qqPhotos\\background.png");
//创建取消按钮,并为取消按钮添加图片控件
closeButton = new JButton(new ImageIcon("D:\\EclispeProjects\\Demo15\\src\\QQLogin\\qqPhotos\\close.png"));
//设置取消按钮的边界
closeButton.setBounds(506, 0, 30, 30);
//取消边框
closeButton.setBorder(null);
//添加取消按钮事件
closeJFrame();
//内容面板添加取消按钮
contentPane.add(closeButton);
}
private void closeJFrame() {
closeButton.addActionListener(e -> this.dispose());
}
/**
* 设置自定义背景图片
*/
private void setBackground(String path) {
//获取背景图片
ImageIcon imageIcon = ImageUtil.getImage(path);
//通过标签控件封装图片标签后,添加到布局控件
JLabel jLabelImage = new JLabel(imageIcon);
//设置标签边界
jLabelImage.setBounds(0, 0, imageIcon.getIconWidth(), imageIcon.getIconHeight());
//添加至布局面板,z 轴 的距离new Integer(Integer.MIN_VALUE)
getLayeredPane().add(jLabelImage, new Integer(Integer.MIN_VALUE));
//设置内容面板不透明为假
contentPane.setOpaque(false);
}
}
swing实现QQ登录界面1.0( 实现了同一张图片只加载一次)、(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件)的更多相关文章
- 编写Java程序,使用Swing布局管理器和常用控件,实现仿QQ登录界面
返回本章节 返回作业目录 需求说明: 使用Swing布局管理器和常用控件,实现仿QQ登录界面 实现思路: 创建登录界面的类QQLogin,该类继承父类JFrame,在该类中创建无参数的构造方法,在构造 ...
- 界面编程模仿篇(QQ登录界面逼真篇)
写了好多天的爬虫,偷空前前后后用了两天的时间(排除吃饭睡觉)写完了这个QQ登录界面,看起来还凑和着吧,如果是的大神的,莫见笑,纯属业余作品,废话先不多说,截图如下,其中第二幅图片中的红色方框部份有待完 ...
- JavaSwing仿QQ登录界面,注释完善,适合新手学习
使用说明: 这是一个java做的仿制QQ登录界面,界面仅使用一个类, JDK版本为jdk-11 素材包的名字为:素材(下载)请在项目中新建一个名字为“素材”的文件夹. 素材: https://pan. ...
- Android菜鸟的成长笔记(3)——给QQ登录界面说So Easy
原文:Android菜鸟的成长笔记(3)--给QQ登录界面说So Easy 上一篇:Android菜鸟的成长笔记(2)--第一个Android应用 我们前面已经做了第一个Android应用程序,虽然有 ...
- QQ登录整合/oauth2.0认证-03-对第二节的代码改进
---------------------------目录---------------------------------- QQ登录整合/oauth2.0认证-01-申请appkey和appid ...
- QQ登录整合/oauth2.0认证-02-跳转到QQ互联页
---------------------------目录---------------------------------- QQ登录整合/oauth2.0认证-01-申请appkey和appid ...
- 那些年,我们开发的接口之:QQ登录(OAuth2.0)
那些年,我们开发的接口之:QQ登录(OAuth2.0) 吴剑 2013-06-14 原创文章,转载必须注明出处:http://www.cnblogs.com/wu-jian 前言 开发这些年,做过很多 ...
- QQ登录(OAuth2.0)
QQ登录(OAuth2.0) 那些年,我们开发的接口之:QQ登录(OAuth2.0) 吴剑 2013-06-14 原创文章,转载必须注明出处:http://www.cnblogs.com/wujian ...
- QQ登录界面布局
简单的qq登录界面布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmln ...
随机推荐
- mysql 查询,天,周,月等写法
1.查询当天的数据 select * from 表名 where TO_DAYS(时间字段)=TO_DAYS(NOW()); 2.查询当周的数据 select * from 表名 where YEAR ...
- base 64 bug & encodeURIComponent
base64 bug & encodeURIComponent window.btoa("jëh²H¶�%28"); // "autoskiptoclMjiu&q ...
- Array in Depth
Array in Depth Array.concat() & Array.push() https://developer.mozilla.org/en-US/docs/Web/JavaSc ...
- qt 取进程列表,读写内存, 写字节集
导入库 pro win32:LIBS += -lpsapi win32:LIBS += -lkernel32 获取列表 #include "mainwindow.h" #inclu ...
- HGAME apache
HGAME apache Linux下六十四位可执行文件 IDA找主函数 输入长度为35的字符串,经过一次函数处理,之后if条件函数的返回值为1,就能判定输入就是flag 函数sub_1447的参数 ...
- CMD 中运行 xx 命令提示 不是内部或外部命令,也不是可运行的程序或批处理文件的问题
出现这个问题的原因一般有2个 这个命令依赖某个软件,而你又没有安装 这里你只需要去下载安装好对应的软件,基本上就可以解决上面的问题了. 软件安装好了,但是需要配置环境变量 第二个原因就按照下图,去设置 ...
- 【快速掌握】Redis 的五种数据类型
不同于MySQL的表结构所带来的复杂语句,Redis只需要维护好它的[key-value]结构就可以,因此相比于MySQL,语句非常简单. 今天介绍一下Redis 五种常用的数据类型: 这五种数据类型 ...
- Gateway网关
前提要在注册中心把网关和服务都进行注册 通俗来说,网关就是指在客户端和服务端的一面墙,这面墙有请求转发,负载均衡,权限控制,跨域,熔断降级,限流保护等功能. 客户端发送请求,请求先通过网关,网关根据特 ...
- nginx日志文件切分
定义cut_nginx_log.sh 日志文件脚本如下 #!/bin/bash#LOGS_PATH为日志存放路径LOGS_PATH=/weblog/nginx/logsYESTERDAY=$(date ...
- 从跳频技术聊CDMA/WIFI之母海蒂·拉玛传奇的一生
导语:本篇的内容都是 文末的参考文章摘要而来的,本人根据自己的癖好,以及对 海蒂·拉玛 人生的感慨整理成本文. "WiFi"之母的海蒂·拉玛在中国的知名度,比起克劳德·香农应该也不 ...