解决方案 »

  1.   

    /**
     * 初始化窗口中Banner名字
     */
        
        private void initBannerName() {
         //读取当前文件夹里所有文件
            String[] fileNames = new File(ClientConfig.BANNER_DIR).list(new BannerFilter());
            int count = fileNames.length; 
            if(count > 0){
                int index = new Random().nextInt(count);
                bannerName = fileNames[index];
            }
        }  
        
        public SystemTrayIcon getTray() {
         if (this.loginFrame != null) {
    return this.loginFrame.getTrayIcon();
    }
    return null;
        
        }
        /**
         * 取得当前皮肤
         * @return
         */
        public Skin getCurrentSkin() {
         if (currentSkin != null) { 
         return currentSkin;
    } else {
    this.loadAllSkin(); 
         return currentSkin = skinMap.get(ClientConfig.DEFAULT_SKIN_NAME.toUpperCase());

        }
        
        /**
         * 取得皮肤
         * @param name - 皮肤的名称
         * @return
         */
        public Skin getSkin(String skinName){
            return skinMap.get(skinName.toUpperCase());
        }
        
        /**
         * 取得所有皮肤的返回Map集合类型数据
         * @return
         */
        public Map<String, Skin> getAllSkins(){
            return skinMap;
        }
        
        /**
         * 取得Banner文件名
         * @return
         */
        public String getBannerName(){
            return this.bannerName;
        }
        
        /**
     * 返回当前用户对象
     * @return
     */
    public User getCurrentUser(){
    return currentUser;
    }

    /**
     * 返回历史登录列表
     * @return
     */
    public List<String> getLoginHistory(){
        return loginHistory;
    }    /**
         * 返回系统配置
         * @return
         */
        public Config getConfig(){
            return config;
        }
        
        /**
         * 返回登录配置
         * @return
         */
        public Config getLoginConfig(){
            return loginConfig;
        }
        
        public LoadingFrame getLoadingFrame(){
         return this.loadingFrame;
        }
        
        /**
         * 取得登录的主窗口对象
         * @return
         */
        public MainFrame getMainFrame(){
            return mainFrame;
        }
        
    public void setMainFrame(MainFrame mainFrame) {
    this.mainFrame = mainFrame;
    }

    public void setLoadingFrame(LoadingFrame loadingFrame) {
    this.loadingFrame = loadingFrame;
    }

    /**
     * 进行密码加密
     * @param savedPassword
     * @return
     */
        public String getPasswordTextWhenSaved(String savedPassword){
         return Long.toHexString(Checker.compute(savedPassword, "CRC-32"));
        }
        
        public XMPPConnection getConnection() { 
    return connection;  
        }
     
         
        /**
         * 返回历史用户账号
         * @return
         */
        public String getHistoryUserString() {
            return loginHistory.toString().replaceAll("\\[|\\]| ", "");
        }
        
        /**
         * 删除历史用户
         * @param name 
         */
        public void removeHistoryUser(String username){
            loginHistory.remove(username);
            loginConfig.remove(username + ClientConfig.PASSWORD_KEY);
            loginConfig.remove(username + ClientConfig.AUTO_LOGIN_KEY);
            loginConfig.setPropertie(ClientConfig.LOGIN_HISTORY, getHistoryUserString());
            loginConfig.saveConfig();
        }
        
        /**
         * 输出错误提示信息
         * @param title
         * @param message
         * @param isError
         */
        public void showMessageBeforeLogin(String title, String message, boolean isError){
        
         JAMessageBox messageBox ;
         if (isError) {
    messageBox = JAMessageBox.createErrorMessageBox(this.loginFrame, title, message);
    }else {

    messageBox = JAMessageBox.createInformationMessageBox(this.loginFrame, title, message);
    }
        
         Image image = new ImageIcon(ClientConfig.BANNER_DIR + ClientConfig.FILE_SEP + this.bannerName).getImage();
         messageBox.setIconImage(ClientUtil.getImage("Icon18x18.png"));
         messageBox.setBackgroundImage(image);
         messageBox.open();
        }
        
        private void load(){  
            String history = loginConfig.getProperty(ClientConfig.LOGIN_HISTORY);
            String[] historyList;
            int count = 0;
            boolean isAuto = false;
            String autoerrorMsg = null;
            
            if(history != null && (historyList = history.split(ClientConfig.USER_LIST_SEP)).length > 0){
                for(String name: historyList){
                    if(User.isAllowedName(name)){
                        loginHistory.add(name);
                        count++;
                    }
                    
                    if(count >= ClientConfig.MAX_HISTORY_USER_COUNT){
                        break;
                    }
                }
            }
            
            if(!loginHistory.isEmpty()){
                String first = loginHistory.get(0);
                isAuto = Boolean.parseBoolean(loginConfig.getProperty(first + ClientConfig.AUTO_LOGIN_KEY, "false"));
                
                if(isAuto){
                    String savedPassword = loginConfig.getProperty(first + ClientConfig.PASSWORD_KEY);
                    
                    if(savedPassword == null){
                        isAuto = false;
                    }else{
                     try {
         this.connection.login(first, savedPassword, "my_pc_client");
         //取得当前用户相关的好友
         userRoster=connection.getRoster();
         userRoster.setSubscriptionMode(Roster.SubscriptionMode.manual);
         vcard = new VCard();
         vcard.load(connection, "1234@sh-711701-00039/my_pc_client");
         } catch (Exception e) {
         if ("Not connected to server.".equalsIgnoreCase(e.getMessage())) {
         showMessageBeforeLogin(Resources.getString("title.error"), 
         Resources.getString("message.server.unavailable"), true);
         } else if ("not-authorized(401)".equalsIgnoreCase(e.getMessage())) {
         showMessageBeforeLogin(Resources.getString("title.error"), 
         Resources.getString("message.loging.failed"), true); 
         }  
         System.out.println("e.getMessage()" + e.getMessage());;
         }
         return;
                             }
                }
            }
            
            if(isAuto) {
                afterLoginSuccess();
            } else{
                loginFrame = new LoginFrame(this);
                
                if(autoerrorMsg != null) {
                    if(currentUser == null) {
                        loginFrame.requestUser();
                    } else {
                        loginFrame.requestPassword(true);
                    }
                    
                    showMessageBeforeLogin("\u767B\u9646", autoerrorMsg, true);
                }
            } 
        }
      

  2.   

        /**
         * 登录验证
         * @param name - 登录账号
         * @param password - 登录密码
         */
        public void login(String name , String password){
         String errorMsg = null;
         if (!User.isAllowedName(name)) {
    errorMsg = Resources.getString("message.username.error");
    this.loginFrame.requestUser();
    }else if (!User.isAllowedPassword(password.trim())) {
    errorMsg = Resources.getString("message.password.error"); 
        this.loginFrame.requestPassword(true);
    }else if (!User.isPasswordLength(password)) { 
    errorMsg = User.PASSWORD_LENGTH_ERROR; 
    this.loginFrame.requestPassword(true);
    }else {
    //系统保存的密码
    String savedPassword = loginConfig.getProperty(name + ClientConfig.PASSWORD_KEY);
    boolean userInput = false;
    //判断
    if (savedPassword != null && password.equals(getPasswordTextWhenSaved(savedPassword))) { 
    userInput = true;
                } else { 
                 savedPassword = password;
                 userInput = true;
                }

    if(userInput){
    try {
    this.connection.login(name, savedPassword, "my_pc_client"); 
    //修改验证方式
    userRoster=connection.getRoster();
    userRoster.setSubscriptionMode(Roster.SubscriptionMode.manual);   
    } catch (Exception e) {
    if ("Not connected to server.".equalsIgnoreCase(e.getMessage())) {
    showMessageBeforeLogin(Resources.getString("title.error"), 
    Resources.getString("message.server.unavailable"), true);
    } else if ("not-authorized(401)".equalsIgnoreCase(e.getMessage())) {
    showMessageBeforeLogin(Resources.getString("title.error"), 
    Resources.getString("message.loging.failed"), true); 
    }  
        return;
    }
    }


         if(errorMsg != null) {
                 currentUser = null;
                 showMessageBeforeLogin(Resources.getString("title.error"), errorMsg, true);
             } else {
              loadingFrame = new LoadingFrame(loginFrame, StartRunning.this); 
                 //currentUser.setAutoLogin(loginFrame.isAutoLogin());
                 //currentUser.setSavePassword(loginFrame.isSavePassword());
                 loginHistory.remove(name);
                 loginHistory.add(0, name);
                 loginConfig.remove(name + ClientConfig.AUTO_LOGIN_KEY);
                 loginConfig.remove(name + ClientConfig.PASSWORD_KEY);
                 if(loginHistory.size() > ClientConfig.MAX_HISTORY_USER_COUNT) {
                     loginHistory = loginHistory.subList(0, ClientConfig.MAX_HISTORY_USER_COUNT);
                 }
                 
                 loginConfig.setPropertie(ClientConfig.LOGIN_HISTORY, getHistoryUserString());
                 loginConfig.saveConfig();
                  
                 //加载本地个人数据数据库
                 LocalDataConnection.getInstance(name); 
                 afterLoginSuccess();
             }
         //为了测试所把上面一行加到此处
         //afterLoginSuccess();
        }
        /**
         * 登录成功则初始化相关的数据
         */
        private void afterLoginSuccess(){
         //当前窗口对象不为空时
         if (loginFrame != null) {
         //关闭当前登录界面
    loginFrame.dispose(); 
                //loginFrame = null;
    }
         //加载所有皮肤
         loadAllSkin(); 
         //  
         if (loadingFrame != null) {
         //关闭当前登录界面
         loadingFrame.dispose();   

        
         mainFrame = new MainFrame(this);
    changeSkin(this.getSkin(config.getProperty(ClientConfig.SKIN_NAME, ClientConfig.DEFAULT_SKIN_NAME)), true); if (this.vcard != null) {
    //this.mainFrame.setUserVCard(vcard);
    }

    //发送在线请求
    Presence presence = new Presence(Presence.Type.available,"",1,Presence.Mode.available);    
    getConnection().sendPacket(presence);  vcard = new VCard(); 
    try { 
    vcard.load(connection, "1236@sh-711701-00039");
                //this.mainFrame.setUserVCard(vcard);
    } catch (XMPPException e) {
    e.printStackTrace();
    }
            //changeSkin(getSkin(config.getProperty(ClientConfig.SKIN_NAME, ClientConfig.DEFAULT_SKIN_NAME)), true);
            //回收垃圾
            startGC();
        }
        /**
         * 关闭闪屏
         */
        private void closeSplash(){
            SplashScreen splash = SplashScreen.getSplashScreen();
            if(splash != null){
                splash.close();
            }
        } 
        /**
         * 退出系统
         */
        public void exit(){
            if(gcTimer != null){
                gcTimer.stop();
            }
            
            if(mainFrame != null){
                config.setPropertie(ClientConfig.TITLE_OPAQUE, String.valueOf(mainFrame.isTitleOpaque()));
                config.setPropertie(ClientConfig.SKIN_ALPHA, String.valueOf(mainFrame.getImageAlpha()));
                config.setPropertie(ClientConfig.SKIN_MODE, String.valueOf(mainFrame.getImageDisplayMode()));
                config.setPropertie(ClientConfig.SKIN_NAME, 
                 currentSkin == null? ClientConfig.DEFAULT_SKIN_NAME : currentSkin.getName());
                
                //config.setPropertie(ClientConfig.TABS_FOREGROUND, mainFrame.getTabForegroundDes());
                //config.setPropertie(ClientConfig.STATUS_FOREGROUND, mainFrame.getStatusForegroundDes());
                boolean maximized = (mainFrame.getExtendedState() & JAFrame.MAXIMIZED_BOTH) != 0;
                config.setPropertie(ClientConfig.WINDOW_MAXIMIZED, String.valueOf(maximized));
                
                if(UIUtil.isTranslucencySupported()) {
                    config.setPropertie(ClientConfig.WINDOW_ALPHA, String.valueOf(AWTUtilities.getWindowOpacity(mainFrame)));
                }
                
                if(!maximized) {
                    config.setPropertie(ClientConfig.WINDOW_SIZE, ClientUtil.sizeToString(mainFrame.getSize()));
                }
            }
            
            config.saveConfig();
            System.exit(0);
        }
        public Roster getUserRoster() {
         return this.userRoster;
        }
        public ImageIcon getSysIcon() {
         return this.sysIcon;
        }
        /**
         * 返回的IM目录为当前用户(user.home)。
         * user.home是所有用户特定的文件被放置在一个多用户系统中运行IM。
         *
         * @return 
         */
        public static String getIMUserHome() {
            return USER_IM_HOME;
        }
        
        /**
         * 初始化相关目录,如果不存在创建相关的目录
         * @param directoryHome - IM目录
         * @param directoryName - 目录名称
         * @return 返回相关的File对象
         */
        private static synchronized File initializeDirectory(File directoryHome, String directoryName){
         File targetDir = new File(directoryHome, directoryName).getAbsoluteFile();
            if(!targetDir.exists()){
             targetDir.mkdirs();
            }
            return targetDir;
        }
        
        /**
         * 初始化相关目录,如果不存在创建相关的目录
         * 
         * @param directoryName - 目录名称
         * @return  返回相关的File对象
         */
        private static synchronized File initializeDirectory(String directoryName){
         return initializeDirectory(new File(USER_IM_HOME), directoryName);
        }
        
        /**
         * 返回IM安装的Bin目录 , bin目录包含着启动IM的所需脚本
         * @return
         */
        public static File getBinDirectory() {
         if (BIN_DIRECTORY == null ) {
         BIN_DIRECTORY = initializeDirectory("bin");
         }
         return BIN_DIRECTORY;
        }
        
        /**
         * 返回IM安装的资源目录。
         * 资源目录包含了所有本地库运行所需的操作系统特定的操作,如托盘支持。
         * 您可以将其他本地在这个目录库,如果你想拥有它们放置到system.library.path。
         * @return
         */
        public static File getResourceDirectory() {
         if (RESOURCE_DIRECTORY == null ) {
         RESOURCE_DIRECTORY = initializeDirectory("resources");
         }
            return RESOURCE_DIRECTORY;
        }
        
        /**
         * 返回日志目录中。日志目录包含所有IM的调试和错误文件。
         *
         * @return 日志目录
         */
        public static File getLogDirectory() {
         if (LOG_DIRECTORY == null ) {
         LOG_DIRECTORY = initializeDirectory("logs");
         }
            return LOG_DIRECTORY;
        }
        
        /**
         * 返回皮肤目录。皮肤目录包含所有IM的皮肤。
         *
         * @return 皮肤目录
         */
        public static File getSkinDirectory() {
         if (SKIN_DIRECTORY == null ){
         SKIN_DIRECTORY = initializeDirectory("skin");
         }
        
            return SKIN_DIRECTORY;
        }
        
        /**
         * 返回配置目录。配置目录包含所有IM的相关配置文件。
         *
         * @return 配置目录
         */
        public static File getConfigDirectory() {
         if (CONFIG_DIRECTORY == null ) {
         CONFIG_DIRECTORY = initializeDirectory("config");
         }
            return CONFIG_DIRECTORY;
        }
        
        
        /**
         * Banner文件过滤流
         * @author 东泽   2012-06-19
         *
         */
        private class BannerFilter implements FilenameFilter{
            public boolean accept(File dir, String name){
                return name.toLowerCase().endsWith(ClientConfig.DOT_PNG);
            }
        }  
       
    /**
     * @param args
     */
    public static void main(String[] args) { 
    System.setProperty("sun.java2d.noddraw", "true");
            ToolTipManager.sharedInstance().setInitialDelay(200);
            UIUtil.setPopupMenuConsumeEventOnClose(false);
            
            if(Util.isWindows()){
                UIUtil.initToolTipForSystemStyle();
            }
            
            UIUtil.hideInputRect();
            
            EventQueue.invokeLater(new Runnable(){
                public void run(){
                 //SplashProcess.start();
                    new StartRunning();
                }
            });
    }}
      

  3.   

    支持一个 Swing现在实际用处不多啊
      

  4.   

    人人都说Swing丑,唯我独爱它—Swing高仿QQ
    这个东西只能说一种爱好与兴趣吧!或是用来研究java里面一些如一些MVC模型、适配器模式等等还是不错的。
      

  5.   

    人人都说Swing丑,唯我独爱它—Swing高仿QQ
    这个东西只能说一种爱好与兴趣吧!或是用来研究java里面一些如一些MVC模型、适配器模式等等还是不错的。
    qq这个还是很不错的 能学到很多东西  发个截图看看
      

  6.   

    人人都说Swing丑,唯我独爱它—Swing高仿QQ
    这个东西只能说一种爱好与兴趣吧!或是用来研究java里面一些如一些MVC模型、适配器模式等等还是不错的。
    qq这个还是很不错的 能学到很多东西  发个截图看看
    请点击下面文字人人都说Swing丑,唯我独爱它—Swing高仿QQ
      

  7.   

    楼主 求源码? 给我好吗 我拿来完成设计。邮箱[email protected]
      

  8.   

    楼主 源码可以学习学习吗 ?求源码,[email protected]
      

  9.   

    人类应该朝着前进的方向走因为Java不适合做界面  而且swing确实不好看即便你能弄好看了   如果换别的语言  时间可能会省去一大半就像总说什么  不使用IDE也能开发程序  这是反人类文明的那样还用什么面向对象呢  还用什么编程语言呢  还用什么计算机呢
      

  10.   

    楼主求这个源代码!我刚学这个Swing,借鉴学习下!邮箱[email protected]
      

  11.   

    楼主求源代码。万分感谢啊!!![email protected]
      

  12.   

    楼主求源代码。万分感谢啊!!![email protected]楼主求源代码。万分感谢啊!!![email protected]楼主求源代码。万分感谢啊!!![email protected]
      

  13.   

    楼主能给个源代码不??wgzhenyuan@sina,com  感谢楼主
      

  14.   

    源码算了吧,做界面,图片搞好就行了。楼主也就是把QQ截了个图,再PS修一下而已。
    楼主对Swing的应用也就是拼凑了一下组件而已。
    Swing界面开发的精髓是LAF,想成为真正的Swing高手,还是写个完整的LAF更有效果。
    老是用自己认为的方式模拟QQ界面,只是使用了Swing的皮毛而已。
    就像JAVA诞生初期,很多人骂JAVA效率低一样。那都是程序员老是用自认为的方式使用JAVA的缘故。
    真正用Java搞界面还是老外的例子更COOL!