将不定期开放“人人都说Swing丑,唯我独爱它—Swing高仿QQ” 源码

ycb1689 2013-07-18 04:54:04

从今天开始将会在CSDN上开放Swing高仿QQ的源码。
所有信息第一时间在群里公布

一起探讨java方面的问题。
本群位置有限先来先得
所以加群时请注名信息来源地


package client.login;

import java.awt.EventQueue;
import java.awt.Image;
import java.awt.SplashScreen;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.TreeMap;

import javax.swing.ImageIcon;
import javax.swing.Timer;
import javax.swing.ToolTipManager;

import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smackx.packet.VCard;

import swingx.crazy.componentx.JADialog;
import swingx.crazy.componentx.JAFrame;
import swingx.crazy.componentx.JAMessageBox;
import swingx.crazy.security.Checker;
import swingx.crazy.systeminfo.OSUtils;
import swingx.crazy.util.Config;
import swingx.crazy.util.UIUtil;
import swingx.crazy.util.Util;
import client.SystemTrayIcon;
import client.beans.user.User;
import client.data.LocalDataConnection;
import client.resources.Resources;
import client.skin.Skin;
import client.util.ClientConfig;
import client.util.ClientUtil;

import com.sun.awt.AWTUtilities;


public class StartRunning {
private XMPPConnection connection;
private static String USER_IM_HOME;
//参数
public static String ARGUMENTS;
//资源文件目录
private static File RESOURCE_DIRECTORY;
//bin(二进制)文件目录
private static File BIN_DIRECTORY;
//日志文件目录
private static File LOG_DIRECTORY;
//客户端文件目录
private static File USER_DIRECTORY;
//plugin(接口)文件目录
private static File PLUGIN_DIRECTORY;
//xtra文件目录
private static File XTRA_DIRECTORY;
//config文件目录
private static File CONFIG_DIRECTORY;
//skin文件目录
private static File SKIN_DIRECTORY;
//客户端程序配置、登录配置
private Config config, loginConfig;
//登录窗口
private LoginFrame loginFrame;

public ImageIcon sysIcon = new ImageIcon(ClientConfig.IMAGE_DIR + ClientConfig.FILE_SEP + "tray"+ClientConfig.FILE_SEP+"online.png");

//正在登录窗口
private LoadingFrame loadingFrame;
//客户端主界面
private MainFrame mainFrame;
//存放界面皮肤的集合
private Map<String, Skin> skinMap;
//当前系统的皮肤和当前预览的皮肤
private Skin currentSkin, currentPreviewSkin;
//垃圾回收定时器
private Timer gcTimer;
//登录历史记录列表
private List<String> loginHistory;
//当前登录的用户
private User currentUser;
//登录界面Banner
private String bannerName;

private Roster userRoster;
private VCard vcard;
public StartRunning() {
super();
System.setProperty("java.awt.im.style", "no-spot");
//读取初始化配置
this.config = new Config(ClientConfig.CONFIG_PATH);
this.loginConfig = new Config(ClientConfig.LOGIN_CONFIG_PATH);
this.loginHistory = new ArrayList<String>(ClientConfig.MAX_HISTORY_USER_COUNT);
initDirectory();

initBannerName();
//连接服务器
ModelUtils.connServer();
connection = ModelUtils.getConnection();
if(!isRunning()) {
//DBConnectionManager.getInstance();
load();
} else {
System.exit(0);
}
}
/**
* 确保目录的存在,不存在则重新生成
*/
private void initDirectory() {
USER_IM_HOME = ClientConfig.USER_DIR + "/";
BIN_DIRECTORY = initializeDirectory("bin");
LOG_DIRECTORY = initializeDirectory("logs");
USER_DIRECTORY = initializeDirectory("users");
SKIN_DIRECTORY = initializeDirectory("skin");
CONFIG_DIRECTORY = initializeDirectory("config");
PLUGIN_DIRECTORY = initializeDirectory("plugin");
RESOURCE_DIRECTORY = initializeDirectory("resources");
XTRA_DIRECTORY = initializeDirectory("resources/xtra");
}

/**
* 跟踪用户配置目录。
*
* @return 根据操作系统的目录名。
*/
public static String getUserConf() {
if (OSUtils.isLinux()) {
return null;
} else if(OSUtils.isMacOSX()) {
return null;
} else {
return ClientConfig.USER_DIR;
}

}
/**
* 验证当前同一台机器上已经运行的客户端数量
* @return
*/
private boolean isRunning(){
String info = null;
//具体代码暂未实现
return info != null;
}


/**
* 加载系统的所有皮肤
*/
public void loadAllSkin(){
//所有皮肤的集合
skinMap = new TreeMap<String, Skin>();
Skin defaultSkin = new Skin(ClientConfig.DEFAULT_SKIN_NAME);
skinMap.put(defaultSkin.getName().toUpperCase(), defaultSkin);
File skinRoot = new File(ClientConfig.SKIN_DIR);

if (skinRoot.exists() && skinRoot.isDirectory()){
File[] skinDirs = skinRoot.listFiles();
String name, path;
File file;
int count = 0;

for (File skinDir: skinDirs){
if (skinDir.isDirectory()){
name = skinDir.getName();
path = skinDir.getPath();
file = new File(path + ClientConfig.FILE_SEP + ClientConfig.SKIN_NORMAL_FILE_NAME);

if (!file.exists() || !file.isFile()){
continue;
}

file = new File(path + ClientConfig.FILE_SEP + ClientConfig.SKIN_BLUR_FILE_NAME);

if (!file.exists() || !file.isFile()){
continue;
}

file = new File(path + ClientConfig.FILE_SEP + ClientConfig.SKIN_PREVIEW_FILE_NAME);
if (!file.exists() || !file.isFile()){
continue;
}

skinMap.put(name.toUpperCase(), new Skin(name));
count++;

if (count >= ClientConfig.MAX_SKIN_COUNT - 1){
break;
}
}
}
}

}

/**
* 更改系统皮肤
*/
public void changeSkin(Skin newSkin, boolean save){

boolean currentShow = (currentPreviewSkin == newSkin);

if((!save && currentShow) || (save && currentSkin == newSkin)){
return;
}

if(newSkin == null){
newSkin = skinMap.get(ClientConfig.DEFAULT_SKIN_NAME.toUpperCase());
}

if(!currentShow){

Image image = newSkin.getImage();
Image blurImage = newSkin.getBlurImage();
BufferedImage bufferedBlurImage = blurImage == null? null: UIUtil.toBufferedImage(blurImage, null);

for (Window win: Window.getWindows()){
if(win.isDisplayable()){
if(win instanceof JAFrame){

((JAFrame)win).setBackgroundImage(image, bufferedBlurImage);
} else if(win instanceof JADialog){
((JADialog)win).setBackgroundImage(image, bufferedBlurImage);
}
}
}

currentPreviewSkin = newSkin;
image = null;
blurImage = null;
}

if( save){

for (Skin skin: skinMap.values()){
skin.setSelected(skin == newSkin);
}

currentSkin = newSkin;
config.savePropertie(ClientConfig.SKIN_NAME, currentSkin.getName());
}

}

/**
* 回收垃圾内存
*/
public void startGC() {
int delay = Integer.parseInt(config.getProperty(ClientConfig.GC_PERIOD, "5000"));
//初始化定时器
gcTimer = new Timer(delay, new ActionListener(){
public void actionPerformed(ActionEvent e){
System.gc();
}
});
gcTimer.start();
}
...全文
1396 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
支持楼主的分享精神
心尖偏左 2014-11-05
  • 打赏
  • 举报
回复
牛!求源码,764613916@qq.com
雨落无影 2014-11-05
  • 打赏
  • 举报
回复
楼主,你那个好友列表是怎么做到和QQ那么像的?
java-demo 2014-04-08
  • 打赏
  • 举报
回复
恩,学习了,最近正好学到swing,看看
名字不可见 2014-04-07
  • 打赏
  • 举报
回复
源码算了吧,做界面,图片搞好就行了。楼主也就是把QQ截了个图,再PS修一下而已。 楼主对Swing的应用也就是拼凑了一下组件而已。 Swing界面开发的精髓是LAF,想成为真正的Swing高手,还是写个完整的LAF更有效果。 老是用自己认为的方式模拟QQ界面,只是使用了Swing的皮毛而已。 就像JAVA诞生初期,很多人骂JAVA效率低一样。那都是程序员老是用自认为的方式使用JAVA的缘故。 真正用Java搞界面还是老外的例子更COOL!
技术菜 2014-03-19
  • 打赏
  • 举报
回复
楼主 有没有学习的群啊 发个呗
技术菜 2014-03-19
  • 打赏
  • 举报
回复
楼主能给个源代码不??wgzhenyuan@sina,com 感谢楼主
cszcxh 2014-03-19
  • 打赏
  • 举报
回复
楼主求源代码。万分感谢啊!!!982509845@qq.com楼主求源代码。万分感谢啊!!!982509845@qq.com楼主求源代码。万分感谢啊!!!982509845@qq.com
michael_my 2014-03-19
  • 打赏
  • 举报
回复
楼主求源代码。万分感谢啊!!!982509845@qq.com
你沙城 2014-03-17
  • 打赏
  • 举报
回复
楼主 源码可以学习学习吗 ?求源码,lllwatch@163.com
你沙城 2014-03-17
  • 打赏
  • 举报
回复
顶一个 ,好东西!
raedon 2014-03-17
  • 打赏
  • 举报
回复
楼主屌炸天.
u013945402 2014-03-17
  • 打赏
  • 举报
回复
楼主求这个源代码!我刚学这个Swing,借鉴学习下!邮箱643720214@qq.com
sunbo624 2014-03-17
  • 打赏
  • 举报
回复
人类应该朝着前进的方向走 因为Java不适合做界面 而且swing确实不好看 即便你能弄好看了 如果换别的语言 时间可能会省去一大半 就像总说什么 不使用IDE也能开发程序 这是反人类文明的 那样还用什么面向对象呢 还用什么编程语言呢 还用什么计算机呢
David_359 2013-12-06
  • 打赏
  • 举报
回复
Inhibitory 2013-10-24
  • 打赏
  • 举报
回复
关键还是图片效果做得好。
hxlailfh 2013-10-24
  • 打赏
  • 举报
回复
楼主 求源码? 给我好吗 我拿来完成设计。邮箱510456018@qq.com
jackdaifei 2013-07-19
  • 打赏
  • 举报
回复
牛掰的楼主,支持一个!!
执执念 2013-07-18
  • 打赏
  • 举报
回复
楼主牛逼!!!!
wandefajin 2013-07-18
  • 打赏
  • 举报
回复
挺好的东西不能错过!
加载更多回复(6)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧