好几天没上Javaeye了,最近几天日子一直很忙碌,弄出来一个晴儿QQ的主界面,效果图如下:
代码如下:
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;
import com.component.StatusButton;
import com.component.SysButton;
import com.component.TTMenuItem;
import com.component.TTPanel;
import com.component.TTPopupMenu;
import com.componentListener.WinEventAdapter;
import com.componentUI.TScrollBarUI;
import com.sun.awt.AWTUtilities;
import com.uiresource.Resource;
import com.uiutil.UIUtil;
public class TT{
/**阐述:该文件定义了晴儿QQ聊天软件的操作主界面
* 作者:陈阳(JavaEye博客:http://chen6485.iteye.com/)
* 说明:开发环境:MyEclipse6.6 JDK版本:Java(TM)SE Development Kit 6 Update 22
*/
private static final long serialVersionUID = -7757220015983708063L;
private JButton close;
private JButton max;
private JButton restore;
private JButton min;
private JButton sys;
private JDialog tt;
private SysButton zone;
private SysButton mail;
private SysButton shop;
private SysButton money;
private SysButton news;
private SysButton message;
private SysButton color;
private SysButton set;
private SysButton manageTool;
private StatusButton sta;
private JScrollPane sc;
private Resource res;
private TTPanel panel;
private Dimension screen;
private JLabel userHead;
private JLabel userNickname;
private JLabel userSignatrue;
private JLabel titleIma;
private TTPopupMenu stat;
private ImageIcon face;
private String status;
private String nick;
private ImageIcon title;
public TT(){
initComponent();
init();
}
public void init(){
screen=Toolkit.getDefaultToolkit().getScreenSize();//获取屏幕长宽
tt=new JDialog();
WinEventAdapter winMove=new WinEventAdapter(tt);
tt.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
tt.setUndecorated(true);//不启用修饰true
tt.setSize(239,535);
tt.setAlwaysOnTop(true);
tt.addMouseListener(winMove);
tt.addMouseMotionListener(winMove);
AWTUtilities.setWindowOpaque(tt, false);
panel=new TTPanel(tt);
panel.setLayout(null);
close.setBounds(tt.getWidth()-39, 0, 38, 18);
max.setBounds(tt.getWidth()-64, 0, 25, 18);
min.setBounds(tt.getWidth()-89, 0, 25, 18);
sta.setBounds(60,25,36,23);
zone.setBounds(7,75,23,23);
mail.setBounds(35,75, 23, 23);
shop.setBounds(63,75,23,23);
money.setBounds(91,75,23,23);
news.setBounds(119,75,23,23);
message.setBounds(tt.getWidth()-56,75,23,23);
set.setBounds(53,tt.getHeight()-28,23,23);
manageTool.setBounds(80,tt.getHeight()-28,23,23);
color.setBounds(tt.getWidth()-28,75,23,23);
sys.setBounds(5,tt.getHeight()-42,41,41);
sc.setBounds(2, 100,tt.getWidth()-4,tt.getHeight()-160);
userNickname.setBounds(100,25,tt.getWidth(),20);
userSignatrue.setBounds(65,46,139, 22);
userHead.setBounds(15,25,40,40);
titleIma.setBounds(2, 2, 90, 18);
panel.add(close);
panel.add(max);
panel.add(min);
panel.add(sta);
panel.add(zone);
panel.add(mail);
panel.add(shop);
panel.add(money);
panel.add(news);
panel.add(message);
panel.add(color);
panel.add(sys);
panel.add(sc);
panel.add(set);
panel.add(manageTool);
panel.add(userNickname);
panel.add(userSignatrue);
panel.add(userHead);
panel.add(titleIma);
tt.setContentPane(panel);
tt.setVisible(true);
panel.repaint();
tt.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
}
public void initComponent(){
title=new ImageIcon(this.getClass().getResource("../image/title.png"));//QQ标题
titleIma=new JLabel(title);
userNickname=new JLabel();
userNickname.setFont(new Font("黑体",Font.PLAIN,14));
userSignatrue=new JLabel();
userHead=new JLabel();
try{
Properties prop = new Properties();//Properties类表示了一个持久的属性集
InputStream is = new FileInputStream("User/10001/Info.ini");
InputStreamReader reader = new InputStreamReader (is,"GBK");
prop.load(reader);
if (reader!= null){
status=prop.getProperty("status");//获取登陆状态
nick=prop.getProperty("nickName");//获取昵称
userSignatrue.setText(prop.getProperty("sigNatrue"));//获取个性签名
String s=prop.getProperty("Ico");//获取头像
face=new ImageIcon(this.getClass().getResource("../image/face/"+ s +".png"));
reader.close();
}else{
System.out.println("无法读取文件");
}
}catch(Exception e){
e.printStackTrace();
}
userHead.setIcon(face);
userNickname.setText(nick+"["+status+"]");
stat=new TTPopupMenu();//状态选择下拉菜单
TTMenuItem status1=new TTMenuItem("我在线上",res.onlineIcon);
TTMenuItem status2=new TTMenuItem("Q我吧",res.tmeIcon);
TTMenuItem status3=new TTMenuItem("离开",res.awayIcon);
TTMenuItem status4=new TTMenuItem("忙碌",res.busyIcon);
TTMenuItem status5=new TTMenuItem("请勿打扰",res.noIcon);
TTMenuItem status6=new TTMenuItem("隐身",res.hideIcon);
TTMenuItem status7=new TTMenuItem("离线",res.hideIcon);
TTMenuItem status8=new TTMenuItem("关闭所有声音",res.hideIcon);
TTMenuItem status9=new TTMenuItem("锁定晴儿QQ Ctrl+Alt+L",null);
TTMenuItem status10=new TTMenuItem("系统设置",null);
TTMenuItem status11=new TTMenuItem("我的资料",null);
TTMenuItem status12=new TTMenuItem("我的晴儿QQ中心",null);
sc=new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);//好友滚动面板
//sc.getViewport().setView();
close=UIUtil.creatButton(res.close_normal, res.close_rollover, res.close_press);//关闭按钮
max=UIUtil.creatButton(res.max_normal, res.max_rollover, res.max_press);//最大化按钮
restore=UIUtil.creatButton(res.restore_normal, res.restore_rollover, res.restore_press);//还原大小按钮
min=UIUtil.creatButton(res.min_normal, res.min_rollover, res.min_press);//最小化按钮
sys=UIUtil.creatButton(res.sys_normal, res.sys_rollover, res.sys_press);//系统按钮
zone=new SysButton(res.zone);//空间按钮
mail=new SysButton(res.mail);//邮件按钮
shop=new SysButton(res.shop);//商城按钮
money=new SysButton(res.money);//钱包按钮
news=new SysButton(res.news);//新闻按钮
message=new SysButton(res.message);//消息按钮
color=new SysButton(res.color);//颜色按钮
set=new SysButton(res.set);//系统设置按钮
manageTool=new SysButton(res.manageTool);//消息管理器按钮
sta=new StatusButton(res.online,true);
sc.setBorder(new EmptyBorder(0,0,0,0));
sc.getVerticalScrollBar().setUI(new TScrollBarUI());//垂直滚动条
sc.getHorizontalScrollBar().setUI(new TScrollBarUI());//平行滚动条
stat.add(status1);
stat.add(status2);
stat.add(status3);
stat.add(status4);
stat.add(status5);
stat.add(status6);
stat.add(status7);
stat.add(status8);
stat.add(status9);
stat.add(status10);
stat.add(status11);
stat.add(status12);
status1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sta.setNormalImage(res.online);
userNickname.setText(nick+"[我在线上]");
}
});
status2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sta.setNormalImage(res.tme);
userNickname.setText(nick+"[Q我吧]");
}
});
status3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sta.setNormalImage(res.away );
userNickname.setText(nick+"[离开]");
}
});
status4.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sta.setNormalImage(res.busy);
userNickname.setText(nick+"[忙碌]");
}
});
status5.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sta.setNormalImage(res.no);
userNickname.setText(nick+"[请勿打扰]");
}
});
status6.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sta.setIcon(res.hideIcon);
userNickname.setText(nick+"[隐身]");
}
});
status7.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//sta.setIcon(res.onlineIcon);
userNickname.setText(nick+"[隐身]");
}
});
status8.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
}
});
status9.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
}
});
status10.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
}
});
status11.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
}
});
status12.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
}
});
close.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
max.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
tt.setSize(screen.width,screen.height-30);
tt.setLocation(0, 0);
close.setBounds(tt.getWidth()-39, 0, 38, 18);
panel.remove(max);
panel.add(restore);
restore.setBounds(tt.getWidth()-64, 0, 25, 18);
min.setBounds(tt.getWidth()-89, 0, 25, 18);
message.setBounds(tt.getWidth()-56, 75, 23, 23);
color.setBounds(tt.getWidth()-28, 75, 23, 23);
sys.setBounds(5,tt.getHeight()-42,41,41);
sc.setBounds(2, 100,tt.getWidth()-4,tt.getHeight()-160);
set.setBounds(53,tt.getHeight()-28,23,23);
manageTool.setBounds(80,tt.getHeight()-28,23,23);
}
});
min.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
tt.setVisible(false);
}
});
restore.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
tt.setSize(239,535);
tt.setLocation(0, 0);
close.setBounds(tt.getWidth()-39,0,38,18);
panel.remove(restore);
panel.add(max);
max.setBounds(tt.getWidth()-64,0,25,18);
min.setBounds(tt.getWidth()-89,0,25,18);
message.setBounds(tt.getWidth()-56,75,23,23);
color.setBounds(tt.getWidth()-28,75,23,23);
sys.setBounds(5,tt.getHeight()-42,41,41);
sc.setBounds(2, 100,tt.getWidth()-4,tt.getHeight()-160);
set.setBounds(53,tt.getHeight()-28,23,23);
manageTool.setBounds(80,tt.getHeight()-28,23,23);
}
});
sta.addMouseListener(new MouseAdapter(){//状态选择按钮事件监听
public void mouseClicked(MouseEvent e){
if(e.getButton()==MouseEvent.BUTTON1){
stat.show(e.getComponent(),-5,20);
}
}
});
}
public static void main(String args[]){
UIUtil.setSysFont();
new TT();
}
}
这段代码贴出来多少有点寒酸,就一套号称可以对商用软件“终极”逆向的代码居然就这水平!用一句网络俏皮话来说,这不是在“坑爹”吗?哎!的确,这段代码中至少有三个问题没有解决,第一:字体问题,由AWTUtilities.setWindowOpaque(window, false)定义出来的圆角面板在绘制字体时会出现质量下降的问题,一时半会还真不知道该怎么解决,呜呜。。。。。。第二:好友区实现的问题,这个好友区应该是通过渲染JList来实现的,至于具体怎么实现,我暂时还没有成熟的代码,悲剧。。。。。。第三:组件布局问题,在这个界面中我采用的是绝对定位的办法来定位组件,这也就出现了一个问题,改变大小时无法移动相应的组件,哎!哎!。。。。。。因为没太多的时间去仔细研究这个,暂时只能实现这个,好了,我得去泡个澡澡再来慢慢研究这几个纠结的问题啦,悄悄的,我走了,没带走一行多余的代码。。。。。。
- 大小: 22 KB
分享到:
相关推荐
然而,考虑到标题中的上下文,可以推测这可能是在强调Java和QQ的结合使用,或者是在进行某种循环或迭代操作,这在编程中是常见的。如果这是一个项目描述,那么可能是在说明项目的核心是围绕着Java平台与QQ服务的交互...
【标题】:“java语言 山寨版QQ源码”指的是基于Java编程语言实现的一个简易QQ聊天软件的源代码。这个项目通常是为了教学目的而设计,让学习者能够深入理解Java编程语言在网络通信、多线程、图形用户界面(GUI)等...
java版山寨QQ项目 里面有四个压缩包 QQ服务器端.rar QQ客户端.rar 改进QQ客户机服务器视频实现.rar Q第三方库.rar 这个java版山寨QQ项目实现的功能有: 1.实现的java视频聊天; 2.集成了Mina框架; 3.服务器管理...
通过这个项目,开发者不仅可以学习到Java的基础知识,还能掌握到如何利用Java进行用户界面设计、数据库操作以及网络通信等高级技能。虽然聊天功能尚未实现,但其现有功能已经充分展现了Java语言的灵活性和实用性,...
QQ蜗牛终极版--服务器发包工具D人必备
Java开发案例-springboot-15-QQ第三方登录-源代码+文档.rar Java开发案例-springboot-15-QQ第三方登录-源代码+文档.rar Java开发案例-springboot-15-QQ第三方登录-源代码+文档.rar Java开发案例-springboot-15-QQ第...
总的来说,"java 界面--QQ 代码"项目涵盖了Swing GUI开发的基本知识,包括组件使用、事件处理、文件操作以及基础的异常和测试概念,是一个学习和实践Java GUI编程的好实例。在实际开发中,还需要考虑更多的因素,如...
【标题】"JAVA-QQ-chat-system-instructions.rar" 提供了一个使用Java编程语言构建QQ聊天系统的详细指南。这个教程可能是为了帮助开发者理解如何利用Java技术实现一个类似QQ的即时通讯平台。 【描述】"JAVA QQ chat...
【Java实现的山寨版QQ】项目是一个基于Java编程语言开发的即时通讯软件,它旨在模拟腾讯QQ的基本功能,包括用户登录、在线好友列表展示、一对一私聊以及多人聊天室等功能。这个项目对于学习Java GUI设计、网络编程...
赠送jar包:weixin-java-miniapp-2.8.0.jar; 赠送原API文档:weixin-java-miniapp-2.8.0-javadoc.jar; 赠送源代码:weixin-java-miniapp-2.8.0-sources.jar; 赠送Maven依赖信息文件:weixin-java-miniapp-2.8.0....
【Java实习报告——山寨QQ聊天工具设计】 这份实习报告详细记录了一个基于Java的简易聊天系统的开发过程,项目名为"My_QQ",旨在模仿QQ的基本功能,包括登录、注册、单人及多人聊天,并且退出应用。这个项目是针对...
【Java山寨版QQ项目】是韩顺平老师为了教学目的设计的一个模拟QQ功能的应用程序,旨在帮助初学者理解和掌握Java编程语言以及相关的软件开发技术。这个项目提供了从基础到进阶的Java编程实践,涵盖了网络通信、多线程...
【标题】"山寨QQ2003java源码"揭示了这是一个基于Java编程语言的项目,目的是模仿QQ2003版本的某些功能。在Java领域,源码是程序员编写的程序原始代码,用于实现特定的功能。这个项目可能是为了学习、研究或者改进,...
1.获取QQ空间qzonetoken值 2.构造p参数加密方式getEncryption(QQ密码,QQ账号[16进制标识],验证码,false); 3.获取g_tk算法更新 4.cookie值p_skey,RK,pt4_token,pt_login_sig,ptdrvs,ptvfsession,skey,superkey,...
【标题】"山寨java版qq" 是一个基于Java编程语言开发的简易聊天软件,它旨在模仿QQ的功能,但并非官方版本。这个项目主要是为了学习和实践网络通信、多线程以及用户界面设计等技术。 【描述】这个"山寨版局域网聊天...
【标题】:“用JAVA语言编写:山寨版QQ课程设计报告” 【描述】:“用JAVA编写的QQ聊天工具!有流程图 还有图形界面” 【标签】:“山寨QQ” 【正文】: 本课程设计旨在实现一个基于JAVA的即时通讯工具,模仿QQ...
【标题】"java GUI 山寨QQ"是一个基于Java Standard Edition (Java SE) 开发的图形用户界面(GUI)应用程序,旨在模仿QQ即时通讯软件的功能。这个项目展示了如何利用Java的Swing或JavaFX库来构建桌面应用,并通过SQL...
QQ设置界面在IT行业中是一个常见的用户交互界面,尤其在开发桌面应用时,它扮演着提供个性化设置、账户管理等重要功能的角色。Eclipse是一个广泛使用的Java集成开发环境(IDE),它支持多种插件开发,包括创建这样的...
java 仿QQ登陆界面 主界面java 仿QQ登陆界面 主界面java 仿QQ登陆界面 主界面 效果可以去我QQ空间看 http://user.qzone.qq.com/309306055/infocenter#!app=2&pos=1337351044
此外,为了实现QQ主界面的动画效果和滑动手感,你可能需要对`ViewPager`进行一些自定义设置,如设置滑动速度、滑动监听等。例如,可以使用`setPageTransformer()`添加页面转换动画,或者通过`...