界面编程模仿篇(QQ登录界面逼真篇)
写了好多天的爬虫,偷空前前后后用了两天的时间(排除吃饭睡觉)写完了这个QQ登录界面,看起来还凑和着吧,如果是的大神的,莫见笑,纯属业余作品,废话先不多说,截图如下,其中第二幅图片中的红色方框部份有待完善,明天开始继续搞爬虫,等有时间时再完善,先凑和着吧:


本篇博文就分析一下这个界面设计中的几个关键点,在阅读本博文之前请先阅读我个人博客上关于模仿QQ界面先行篇
本程序开源,下载地址,请查看我个人博客:烟雨林
对于还不会使用github的同学,以下是我的个人博客上的两篇教程
程序采用Java语言实现,本人只懂C++/Java/Python/Shell,其他程序语言一概不懂,等有时间再写其他两种语言的登录版本,可以订阅我的个人博客,获取后绪相关文章与资料
1、QQ界面登录程序最显著的地方就是界面无标题栏,所以第一步就是去掉标题栏,Java中给JFrame去标题栏的方法很easy
|
1
|
setUndecorated(true);
|
的确很easy是吧,但问题又出来了,是去掉了,连窗口的边框都去掉了,这肯定不是想要的结果,在这里可以采用JInternalFrame实现去标题栏同时保留窗口的边框,核心代码如下(代码中jif是JInternalFrame类型):
|
1
2
3
|
javax.swing.plaf.InternalFrameUI jf=jif.getUI();
((javax.swing.plaf.basic.BasicInternalFrameUI)jf).setNorthPane(null);
jif.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 2));
|
2、QQ界面窗口居中
|
1
2
|
setLocation((Toolkit.getDefaultToolkit().getScreenSize().width-getSize().width)/2,
(Toolkit.getDefaultToolkit().getScreenSize().height-getSize().height)/2);
|
3、由于去掉了标题栏,结果最小化,最大化,关闭均被去掉了,更重要的一个功能是窗口随鼠标拖动也被去掉了,因此这些功能都需要自已再重新实现,实现的代码也是很easy的,给JInternalFrame增加监听器,此时得注意的是监听器里操作的对象应该是JFrame,因为最终的目的是对JFrame操作,窗口移动的核心代码如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
//给窗体增加拖动功能
void setWindowDray(JComponent jc){
jc.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
isDragged=true;
axis=new Point(e.getX(),e.getY());
jif.setCursor(new Cursor(Cursor.MOVE_CURSOR));
}
@Override
public void mouseReleased(MouseEvent e) {
isDragged=false;
jif.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
});
jc.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
if(isDragged){
mainLogin.setLocation(e.getXOnScreen()-axis.x,e.getYOnScreen()-axis.y);
}
}
});
}
|
4、重写JPanel,给JPanel增加背景图片,核心代码如下:
|
1
2
3
4
5
6
|
URL imgUrl=getClass().getResource("pics/afternoon.jpg");
URL textureUrl=getClass().getResource("pics/texture.png");
ImageIcon img=new ImageIcon(imgUrl);
ImageIcon txt=new ImageIcon(textureUrl);
g.drawImage(img.getImage(), x, y,this.getSize().width,this.getSize().height,this);
g.drawImage(txt.getImage(), x-50, y,this.getSize().width+100,this.getSize().height,this);
|
5、按钮的相关设置,对JButton的设置主要是设置背景的透明化,大小,内边框等,对JLabel以及JCheckbox作类似处理,相关代码例子如下:
|
1
2
3
4
5
6
7
|
jbtn.setOpaque(false);
jbtn.setMargin(new Insets(0, 0, 0, 0));
jbtn.setContentAreaFilled(false);
jbtn.setFocusPainted(false);
jbtn.setBorderPainted(false);
jbtn.setBorder(null);
jbtn.addMouseListener(new ButtonListener());
|
6、对JPasswordField的处理,QQ密码限制了长度,而且禁止了copy,paste,cut,以及对文本的选择操作,在这里就要自已实现一个类继承JPasswordFiled,在这个类里面重写copy,paste,cut,同时还得重写JPasswordField的Document模型对像,只有重写了它,才能限制密码的输入长度,以下是限制密码长度的代码:
|
1
2
3
4
5
6
7
|
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if(this.getLength()>MAX_LENGTH)
return ;
else
super.insertString(offs, str, a);
}
|
7、最重要的一点,就是如何缩减代码的长度,增加代码复用,这个得自已考虑去
8、程序中不采用任何界面布局,Java中的界面布局不太适合,将布局设置成null,自已控制控件的位置
备注:本程序开发过程中需要用到的软件请参考 界面编程模仿篇(模仿腾讯QQ登录界面先行篇)
最后,如果先和我合作,把这个界面做的更逼真,请阅读Github上如何给别人贡献代码,期待你的参与
界面编程
界面编程模仿篇(QQ登录界面逼真篇)的更多相关文章
- [转]Android:布局实例之模仿QQ登录界面
Android:布局实例之模仿QQ登录界面 预览图: 准备: 1.找到模仿对象 QQ登陆界面UI下载>>>>> 2.导入工程 3.查看布局结构和使用控件 其对应效果图分布 ...
- Android:布局实例之模仿QQ登录界面
预览图: 准备: 1.找到模仿对象 QQ登陆界面UI下载>>>>> 2.导入工程 3.查看布局结构和使用控件 其对应效果图分布为 4.分析样式选择器 下拉箭头2种样式:点 ...
- Android菜鸟的成长笔记(3)——给QQ登录界面说So Easy
原文:Android菜鸟的成长笔记(3)--给QQ登录界面说So Easy 上一篇:Android菜鸟的成长笔记(2)--第一个Android应用 我们前面已经做了第一个Android应用程序,虽然有 ...
- QQ登录界面布局
简单的qq登录界面布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmln ...
- 零基础~仿qq登录界面
html代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...
- WPF开发实例——仿QQ登录界面
原文:WPF开发实例--仿QQ登录界面 版权声明:本文为博主原创文章,如需转载请标明转载地址 http://blog.csdn.net/u013981858 https://blog.csdn.net ...
- JavaSwing仿QQ登录界面,注释完善,适合新手学习
使用说明: 这是一个java做的仿制QQ登录界面,界面仅使用一个类, JDK版本为jdk-11 素材包的名字为:素材(下载)请在项目中新建一个名字为“素材”的文件夹. 素材: https://pan. ...
- swing实现QQ登录界面1.0( 实现了同一张图片只加载一次)、(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件)
swing实现QQ登录界面1.0( 实现了同一张图片只加载一次).(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件) 代码思路分析: 1.(同一张图片仅仅需要加载一次就够了,下 ...
- 编写Java程序,使用Swing布局管理器和常用控件,实现仿QQ登录界面
返回本章节 返回作业目录 需求说明: 使用Swing布局管理器和常用控件,实现仿QQ登录界面 实现思路: 创建登录界面的类QQLogin,该类继承父类JFrame,在该类中创建无参数的构造方法,在构造 ...
随机推荐
- EXCEL : We can't do that to a merged cell.
- 关于Java(不同工具或平台与“Hello World”)
对于任何编程语言,都最常见的入门应用: Hello World NetBeans 和 “Hello World” 编写 Java 程序前,先要准备好: Java SE Development Kit ...
- Python的startswith和endswith
做文本处理的时候经常要判断一个文本有没有以一个子串开始,或者结束.Python为此提供了两个函数: S.startswith(prefix[, start[, end]]) -> bool 如果 ...
- poj 1132
暑假集训做的第一个题,模拟,挺简单的,不过要细心点... 没什么好说的,直接贴代码: #include<cstdio> #include<cstring> using name ...
- 移除Ubuntu“下载额外数据不成功”的提示通知
参考自经过几天的摸索,终于得出安装flashplugin-installer的方法 移除"下载额外数据不成功"的恼人提示通知,方法: $cd /usr/share/package- ...
- IIS tomcat共用80端口解决一个IP多个域名:使用Nginx反向代理方式使两者兼容
环境: windows server 2003,IIS6服务器,Tomcat7服务器 域名有几个: 以下是使用IIS的域名: http://www.formuch.com/ http://www.fo ...
- 【UVA 1395】 Slim Span (苗条树)
[题意] 求一颗生成树,满足最大边和最小边之差最小 InputThe input consists of multiple datasets, followed by a line containin ...
- 【简译】Windows 线程基础
翻译一篇关于windows线程的文章,原文在此.第一次翻译,如有错误请多指教 =========================================华丽的分割线============== ...
- Android Training精要(七)内存管理
在2.3.3及以下版本: 通過定義兩個整形變量來檢測bitmap是否display過或者已經在緩存中 下面的代碼當bitmap滿足兩個條件就被回收掉: 1. 兩個整形變量都變為0 2. bitmap不 ...
- 在老项目中使用Gradle:更改默认目录结构
apply plugin: 'war' sourceCompatibility = 1.5 version = "1.0" //中央仓库 repositories { mavenC ...