界面编程模仿篇(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,在该类中创建无参数的构造方法,在构造 ...
随机推荐
- WordPress D8 主题当中截取文章首图并显示的函数
取自 WordPress D8 主题; 路径 theme\d8\modules ; if ( ! function_exists( 'deel_thumbnail' ) ) : function de ...
- Yii render和renderPartial的区别
以下由我们在信易网络公司开发项目的时候终结出的一些经验 在进行页面输出渲染的时候. 1.render 输出父模板的内容,将渲染的内容,嵌入父模板.|2.renderPartial 则不输出父模板的内容 ...
- simplexml 使用实例
搞了几天php处理xml文件,终于有点头绪,记录下来分享一下.simplexml 是php处理xml文件的一个方法,另一个是dom处理,这里只说simplexml.目前php处理xml用的比较多,比较 ...
- 转载的在DOS下操作mysql
转载原文地址:http://www.server110.com/mysql/201309/1070.html 一.连接MYSQL. 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1 ...
- odoo 的 拉式 和 推式 库链
推式链的数据定义在 stock.location.path 表,视图定义在 “路线” 界面的 “push rules” 具体可参考 入库设置为 Receipt in 2 steps . push ...
- Flink 另外一个分布式流式和批量数据处理的开源平台
Apache Flink是一个分布式流式和批量数据处理的开源平台. Flink的核心是一个流式数据流动引擎,它为数据流上面的分布式计算提供数据分发.通讯.容错.Flink包括几个使用 Flink引擎创 ...
- “\n”与“\r”的区别
ASCII中“\n”代表着换行,“\r”代表着将光标移动到当前显示行的最左边.
- 常用mysql命令(经常更新)
insert into hr_t_clubschedule(clubid) select clubid from hr_t_clubschedule where id=45;//获取指定数据,并插入数 ...
- [cocos2d] 显示状态与文字
前言: 对于显示数值与文字一般有三种方式可以使用: CCLabelTTF .CCLabelBMFont .CCLabelAtlas 详细区别可参考:cocos2d 中添加显示文字的三种方式(CCLab ...
- RubyGems使用
RubyGems的功能类似于Linux下的apt-get.使用它可以方便第从远程服务器下载并安装Rails. # 安装指定gem包,程序先从本机查找gem包并安装,如果本地没有,则从远程gem安装.g ...