⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logonpanel.java

📁 该系统是一个基于p2p的即时聊天系统
💻 JAVA
字号:
/* * @(#) LogonPanel.java * Copyright 2004 HWStudio. All rights reserved. */package hws.item.smart.panel.function.chat;//导入核心Java类库import java.io.IOException;import java.io.StringReader;import java.awt.Insets;import java.awt.FlowLayout;import java.awt.GridBagLayout;import java.awt.GridBagConstraints;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.net.MalformedURLException;import java.util.List;import java.util.Vector;import javax.swing.JPanel;import javax.swing.JLabel;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JOptionPane;import javax.swing.JPasswordField;//导入自定义Java类库import hws.item.smart.Smart;import hws.item.smart.misc.ImageShop;import hws.item.smart.misc.SBChanger;import hws.item.smart.misc.XMLConfig;import hws.item.smart.misc.BorderShop;import hws.item.smart.misc.PopToolkit;import hws.item.smart.misc.StringShop;import hws.item.smart.panel.function.share.UploadPanel;import hws.item.smart.panel.function.share.DownloadPanel;import hws.item.smart.action.chat.logon.LogonSystemAction;import hws.item.smart.action.chat.logon.DeleteCacheAction;import hws.item.smart.utility.chat.UserInfo;//导入第三方Java类库import org.jdom.Element;import org.jdom.Document;import org.jdom.JDOMException;import org.jdom.input.SAXBuilder;import org.jdom.output.XMLOutputter;import org.apache.xmlrpc.XmlRpc;import org.apache.xmlrpc.XmlRpcClient;import org.apache.xmlrpc.XmlRpcRequest;import org.apache.xmlrpc.XmlRpcException;/** * 登录系统面板 * * @version 0.1 2005-08-25 * @author Hwerz */public class LogonPanel extends JPanel {    /*------------------------------------------------------------------------*     *                                属性定义                                *     *------------------------------------------------------------------------*/    /**     * 该类自身的一个静态引用     */    private static LogonPanel panel;    /**     * 登录信息面板     */    private LogonInfoPanel logonInfoPanel;    /*------------------------------------------------------------------------*     *                                构造函数                                *     *------------------------------------------------------------------------*/    /**     * 构造函数为私有,这样在整个运行过程中该类就只能有一个实例     */    private LogonPanel() {        super(new GridBagLayout());        //工具栏面板        GridBagConstraints constraints = new GridBagConstraints(            //gridx, gridy            0, 0,            //gridwidth, gridheight            1, 1,            //weightx, weighty            1.0, 0.0,            //anchor            GridBagConstraints.NORTH,            //fill            GridBagConstraints.HORIZONTAL,            //insets            new Insets(5, 0, 0, 0),            //ipadx, ipady            0, 0);        add(new Toolbar(), constraints);        //登录信息面板        logonInfoPanel = new LogonInfoPanel();        logonInfoPanel.setBorder(BorderShop.LOGON_INFO_BORDER);        constraints.gridy = 1;        constraints.weighty = 1.0;        constraints.insets = new Insets(0, 10, 0, 10);        add(logonInfoPanel, constraints);    }    /*------------------------------------------------------------------------*     *                                公共方法                                *     *------------------------------------------------------------------------*/    /**     * 对该类提供的一个全局访问点,用来实例化该对象     *     * @return 该类唯一的一个实例     */    public static LogonPanel getInstance() {        if (panel == null) {            panel = new LogonPanel();        }        return panel;    }    /**     * 登录     */    public void logon() {        String id = logonInfoPanel.getID();        if (id.length() == 0) {            JOptionPane.showMessageDialog(Smart.getInstance(), "账号不可为空!",                StringShop.HINT_TITLE, JOptionPane.INFORMATION_MESSAGE);        } else {            try {                XmlRpc.setDriver("org.apache.xerces.parsers.SAXParser");                XmlRpcClient client = new XmlRpcClient(genURL());                String response = client.execute(genRequest()).toString();                SAXBuilder builder = new SAXBuilder();                StringReader reader = new StringReader(response);                Document document = builder.build(reader);                Element root = document.getRootElement();                String result = root.getChild("Result").getText();                if (result.equals(StringShop.USER_NOT_EXIST) == true) {                    StringBuffer msg = new StringBuffer();                    msg.append("账号为“");                    msg.append(id);                    msg.append("”的用户不存在!");                    JOptionPane.showMessageDialog(Smart.getInstance(),                        msg.toString(), StringShop.HINT_TITLE,                        JOptionPane.INFORMATION_MESSAGE);                } else if (result.equals(StringShop.USER_IS_ONLINE) == true) {                    StringBuffer msg = new StringBuffer();                    msg.append("账号为“");                    msg.append(id);                    msg.append("”的用户已上线!");                    JOptionPane.showMessageDialog(Smart.getInstance(),                        msg.toString(), StringShop.HINT_TITLE,                        JOptionPane.INFORMATION_MESSAGE);                } else if (result.equals(StringShop.PASSWORD_ERROR) == true) {                    JOptionPane.showMessageDialog(Smart.getInstance(),                        "密码错误,登录失败!", StringShop.HINT_TITLE,                        JOptionPane.INFORMATION_MESSAGE);                } else if (result.equals(StringShop.LOGON_SUCCESS) == true) {                    JOptionPane.showMessageDialog(Smart.getInstance(),                        "登录成功!", StringShop.HINT_TITLE,                        JOptionPane.INFORMATION_MESSAGE);                    addCache();                    Smart.getInstance().logout();                    UserInfo info = UserInfo.getRemoteUserInfo(id);                    ViewPanel.getInstance().setValue(info);                    FriendPanel.getInstance().setValue(info);                    DownloadPanel.getInstance().setValue(info);                    UploadPanel.getInstance().refresh();                } else {                    JOptionPane.showMessageDialog(Smart.getInstance(),                        "登录失败,请稍候再试!", StringShop.HINT_TITLE,                        JOptionPane.INFORMATION_MESSAGE);                }            } catch (ClassNotFoundException e) {                JOptionPane.showMessageDialog(Smart.getInstance(),                    "系统找不到类库“org.apache.xerces.parsers.SAXParser”!",                    StringShop.HINT_TITLE, JOptionPane.INFORMATION_MESSAGE);            } catch (MalformedURLException e) {                e.printStackTrace();            } catch (XmlRpcException e) {                e.printStackTrace();            } catch (IOException e) {                JOptionPane.showMessageDialog(Smart.getInstance(),                    "登录服务已关闭,请稍候再试!", StringShop.HINT_TITLE,                    JOptionPane.INFORMATION_MESSAGE);            } catch (JDOMException e) {                JOptionPane.showMessageDialog(Smart.getInstance(),                    "登录失败,请稍候再试!", StringShop.HINT_TITLE,                    JOptionPane.INFORMATION_MESSAGE);            }        }    }    /**     * 删除缓存     */    public void deleteCache() {        XMLConfig.deleteCache(logonInfoPanel.getID(), true);        logonInfoPanel.reloadCaches();    }    /*------------------------------------------------------------------------*     *                                私有方法                                *     *------------------------------------------------------------------------*/    /**     * 生成请求URL     *     * @return 生成的请求URL     */    private String genURL() {        StringBuffer url = new StringBuffer();        url.append("http://");        url.append(XMLConfig.getServicesIP());        url.append(":");        url.append(XMLConfig.getLogonPort());        url.append("/");        return url.toString();    }    /**     * 生成XML-RPC请求消息     *     * @return 生成的XML-RPC请求消息     */    private XmlRpcRequest genRequest() {        //请求方法        StringBuffer method = new StringBuffer();        method.append(XMLConfig.getLogonClass());        method.append(".");        method.append(XMLConfig.getLogonMethod());        //请求参数        Vector params = new Vector();        XMLOutputter outputter = new XMLOutputter();        params.addElement(outputter.outputString(genDocument()));        return new XmlRpcRequest(method.toString(), params);    }    /**     * 生成XML文档     *     * @return 生成的XML文档     */    private Document genDocument() {        Element request = new Element("Request");        Element level1 = new Element("ID");        level1.setText(logonInfoPanel.getID());        request.addContent(level1);        level1 = new Element("Password");        level1.setText(logonInfoPanel.getPassword());        request.addContent(level1);        level1 = new Element("IP");        level1.setText(PopToolkit.getLocalIP());        request.addContent(level1);        return new Document(request);    }    /**     * 添加缓存     */    private void addCache() {        XMLConfig.addCache(logonInfoPanel.getID(), true);        logonInfoPanel.reloadCaches();    }    /*------------------------------------------------------------------------*     *                                 内部类                                 *     *------------------------------------------------------------------------*/    /**     * 工具栏面板     */    class Toolbar extends JPanel {        /**         * Create a new instance of this class         */        public Toolbar() {            super(new FlowLayout(FlowLayout.CENTER, 5, 0));            //确定            JButton button = new JButton(LogonSystemAction.getInstance());            button.setIcon(ImageShop.OK_IMAGEICON);            button.addMouseListener(new SBChanger(                LogonSystemAction.getInstance().getHintInfo(), false));            add(button);            //删除            button = new JButton(DeleteCacheAction.getInstance());            button.setIcon(ImageShop.DELETE_IMAGEICON);            button.addMouseListener(new SBChanger(                DeleteCacheAction.getInstance().getHintInfo(), false));            add(button);        }    }    /**     * 登录信息面板     */    class LogonInfoPanel extends JPanel        implements ActionListener, ItemListener {        /**         * ID下拉框         */        private JComboBox idComboBox;        /**         * 密码文本框         */        private JPasswordField passwordField;        /**         * Create a new instance of this class         */        public LogonInfoPanel() {            super(new GridBagLayout());            //ID标签            GridBagConstraints constraints = new GridBagConstraints(                //gridx, gridy                0, 0,                //gridwidth, gridheight                1, 1,                //weightx, weighty                0.0, 0.0,                //anchor                GridBagConstraints.NORTHWEST,                //fill                GridBagConstraints.NONE,                //insets                new Insets(5, 10, 0, 0),                //ipadx, ipady                0, 0);            add(new JLabel("ID:"), constraints);            //ID下拉框            idComboBox = new JComboBox(XMLConfig.getAllCaches().toArray());            idComboBox.setEditable(true);            idComboBox.addItemListener(this);            constraints.gridx = 1;            constraints.gridwidth = GridBagConstraints.REMAINDER;            constraints.weightx = 1.0;            constraints.fill = GridBagConstraints.HORIZONTAL;            constraints.insets = new Insets(5, 0, 0, 10);            add(idComboBox, constraints);            //密码标签            constraints.gridx = 0;            constraints.gridy = 1;            constraints.gridwidth = 1;            constraints.weightx = 0.0;            constraints.fill = GridBagConstraints.NONE;            constraints.insets = new Insets(5, 10, 0, 0);            add(new JLabel("密码:"), constraints);            //密码文本框            passwordField = new JPasswordField();            passwordField.addActionListener(this);            constraints.gridx = 1;            constraints.gridwidth = GridBagConstraints.REMAINDER;            constraints.weightx = 1.0;            constraints.fill = GridBagConstraints.HORIZONTAL;            constraints.insets = new Insets(5, 0, 5, 10);            add(passwordField, constraints);        }        /**         * 返回ID         *         * @return ID         */        public String getID() {            return idComboBox.getSelectedItem().toString();        }        /**         * 返回密码         *         * @return 密码         */        public String getPassword() {            char[] chars = passwordField.getPassword();            return String.valueOf(chars, 0, chars.length);        }        /**         * 重载缓存         */        public void reloadCaches() {            unloadCaches();            loadCaches();            passwordField.setText("");        }        /**         * 装载缓存         */        private void loadCaches() {            List caches = XMLConfig.getAllCaches();            for (int i = 0; i < caches.size(); i++) {                idComboBox.addItem(caches.get(i));            }            if (caches.size() > 0) {                DeleteCacheAction.getInstance().setEnabled(true);            } else {                DeleteCacheAction.getInstance().setEnabled(false);            }        }        /**         * 卸载缓存         */        private void unloadCaches() {            idComboBox.removeAllItems();        }        /**         * 实现接口ActionListener的方法         *         * @param event the event that characterizes the action         */        public void actionPerformed(ActionEvent event) {            LogonSystemAction.getInstance().actionPerformed(null);        }        /**         * 实现接口ItemListener的方法         *         * @param event the event that characterizes the change         */        public void itemStateChanged(ItemEvent event) {            passwordField.setText("");        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -