📄 logonpanel.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 + -