?? accountpanel.java
字號:
/* * @(#) AccountPanel.java * Copyright 2004 HWStudio. All rights reserved. */package hws.item.smart.panel.function.mail;//導入核心Java類庫import java.awt.Insets;import java.awt.Component;import java.awt.FlowLayout;import java.awt.GridBagLayout;import java.awt.GridBagConstraints;import java.util.List;import javax.swing.JTree;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JButton;import javax.swing.JTextField;import javax.swing.JSplitPane;import javax.swing.JScrollPane;import javax.swing.JOptionPane;import javax.swing.JPasswordField;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeCellRenderer;import javax.swing.tree.DefaultTreeSelectionModel;import javax.swing.event.TreeSelectionEvent;import javax.swing.event.TreeSelectionListener;//導入自定義Java類庫import hws.item.smart.Smart;import hws.item.smart.misc.XMLConfig;import hws.item.smart.misc.ImageShop;import hws.item.smart.misc.ColorShop;import hws.item.smart.misc.SBChanger;import hws.item.smart.misc.BorderShop;import hws.item.smart.misc.StringShop;import hws.item.smart.misc.ActionCenter;import hws.item.smart.action.mail.account.AddAccountAction;import hws.item.smart.action.mail.account.ApplyChangeAction;import hws.item.smart.action.mail.account.EditAccountAction;import hws.item.smart.action.mail.account.DeleteAccountAction;import hws.item.smart.utility.mail.POP3Info;import hws.item.smart.utility.mail.SMTPInfo;import hws.item.smart.utility.mail.AccountInfo;import hws.item.smart.utility.mail.PersonalInfo;/** * 賬號設置面板 * * @version 0.1 2005-08-22 * @author Hwerz */public class AccountPanel extends JPanel { /*------------------------------------------------------------------------* * 屬性定義 * *------------------------------------------------------------------------*/ /** * 賬號管理樹根節點 */ private static final DefaultMutableTreeNode ACCOUNT_ROOT = new DefaultMutableTreeNode("郵箱賬號"); /** * 該類自身的一個靜態引用 */ private static AccountPanel panel; /** * 賬號視圖面板 */ private AccountViewPanel accountViewPanel; /** * 賬號信息面板 */ private AccountInfoPanel accountInfoPanel; /*------------------------------------------------------------------------* * 構造函數 * *------------------------------------------------------------------------*/ /** * 構造函數為私有,這樣在整個運行過程中該類就只能有一個實例 */ private AccountPanel() { 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); //分割條面板 accountInfoPanel = new AccountInfoPanel(); accountViewPanel = new AccountViewPanel(); JSplitPane spliter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, false, accountViewPanel, accountInfoPanel); spliter.setOneTouchExpandable(true); spliter.setDividerLocation(200); constraints.gridy = 1; constraints.weighty = 1.0; constraints.fill = GridBagConstraints.BOTH; constraints.insets = new Insets(5, 5, 5, 5); add(spliter, constraints); } /*------------------------------------------------------------------------* * 公共方法 * *------------------------------------------------------------------------*/ /** * 對該類提供的一個全局訪問點,用來實例化該對象 * * @return 該類唯一的一個實例 */ public static AccountPanel getInstance() { if (panel == null) { panel = new AccountPanel(); } return panel; } /** * 激活賬號面板上的所有文本框 */ public void activate() { accountInfoPanel.activate(); } /** * 禁用賬號面板上的所有文本框 */ public void inactivate() { accountInfoPanel.inactivate(); } /** * 提交賬號變化 */ public void apply() { AccountInfo oldInfo = accountViewPanel.getSelectedAccount(); AccountInfo newInfo = null; PersonalInfoPanel panel1 = accountInfoPanel.getPersonalInfoPanel(); SMTPInfoPanel panel2 = accountInfoPanel.getSMTPInfoPanel(); POP3InfoPanel panel3 = accountInfoPanel.getPOP3InfoPanel(); if (panel1.getName().length() == 0) { JOptionPane.showMessageDialog(Smart.getInstance(), "姓名不可為空!", StringShop.HINT_TITLE, JOptionPane.INFORMATION_MESSAGE); } else if (panel1.getEmail().length() == 0) { JOptionPane.showMessageDialog(Smart.getInstance(), "電子郵件地址不可為空!", StringShop.HINT_TITLE, JOptionPane.INFORMATION_MESSAGE); } else if (panel2.getURL().length() == 0) { JOptionPane.showMessageDialog(Smart.getInstance(), "發送郵件服務器不可為空!", StringShop.HINT_TITLE, JOptionPane.INFORMATION_MESSAGE); } else if (panel2.getUserID().length() == 0) { JOptionPane.showMessageDialog(Smart.getInstance(), "SMTP郵箱賬號不可為空!", StringShop.HINT_TITLE, JOptionPane.INFORMATION_MESSAGE); } else if (panel3.getURL().length() == 0) { JOptionPane.showMessageDialog(Smart.getInstance(), "接收郵件服務器不可為空!", StringShop.HINT_TITLE, JOptionPane.INFORMATION_MESSAGE); } else if (panel3.getUserID().length() == 0) { JOptionPane.showMessageDialog(Smart.getInstance(), "POP3郵箱賬號不可為空!", StringShop.HINT_TITLE, JOptionPane.INFORMATION_MESSAGE); } else { PersonalInfo info1 = new PersonalInfo(panel1.getName(), panel1.getOrganization(), panel1.getEmail(), panel1.getReply()); SMTPInfo info2 = new SMTPInfo(panel2.getURL(), panel2.getPort(), panel2.getUserID(), panel2.getPassword()); POP3Info info3 = new POP3Info(panel3.getURL(), panel3.getPort(), panel3.getUserID(), panel3.getPassword()); newInfo = new AccountInfo(info1, info2, info3); } //添加賬號 if (oldInfo == null && newInfo != null) { accountViewPanel.addAccount(newInfo); } //編輯賬號 if (oldInfo != null && newInfo != null) { accountViewPanel.editAccount(oldInfo, newInfo); } } /** * 刪除選中賬號 */ public void delete() { accountViewPanel.deleteSelectedAccount(); } /*------------------------------------------------------------------------* * 內部類 * *------------------------------------------------------------------------*/ /** * 工具欄面板 */ class Toolbar extends JPanel { /** * Create a new instance of this class */ public Toolbar() { super(new FlowLayout(FlowLayout.CENTER, 5, 0)); //添加 JButton button = new JButton(AddAccountAction.getInstance()); button.setIcon(ImageShop.ADD_IMAGEICON); button.addMouseListener(new SBChanger( AddAccountAction.getInstance().getHintInfo(), false)); add(button); //刪除 button = new JButton(DeleteAccountAction.getInstance()); button.setIcon(ImageShop.DELETE_IMAGEICON); button.addMouseListener(new SBChanger( DeleteAccountAction.getInstance().getHintInfo(), false)); add(button); //編輯 button = new JButton(EditAccountAction.getInstance()); button.setIcon(ImageShop.EDIT_IMAGEICON); button.addMouseListener(new SBChanger( EditAccountAction.getInstance().getHintInfo(), false)); add(button); //應用 button = new JButton(ApplyChangeAction.getInstance()); button.setIcon(ImageShop.APPLY_IMAGEICON); button.addMouseListener(new SBChanger( ApplyChangeAction.getInstance().getHintInfo(), false)); add(button); } } /** * 賬號視圖面板 */ class AccountViewPanel extends JPanel implements TreeSelectionListener { /** * 賬號管理樹 */ private JTree accountManagerTree; /** * 賬號管理樹的模型 */ private DefaultTreeModel accountManagerModel; /** * Create a new instance of this class */ public AccountViewPanel() { super(new GridBagLayout()); //賬號視圖標簽 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(0, 5, 0, 0), //ipadx, ipady 0, 0); add(new JLabel("賬號視圖"), constraints); //賬號管理樹 accountManagerModel = new DefaultTreeModel(ACCOUNT_ROOT); accountManagerTree = new JTree(accountManagerModel); accountManagerTree.addTreeSelectionListener(this); loadAccounts(); setTree(); setTreeCellRenderer(); JScrollPane scroller = new JScrollPane(accountManagerTree, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); constraints.gridy = 1; constraints.weightx = 1.0; constraints.weighty = 1.0; constraints.fill = GridBagConstraints.BOTH; constraints.insets = new Insets(0, 0, 0, 0); add(scroller, constraints); } /** * 返回選中的賬號 * * @return 選中的賬號 */ public AccountInfo getSelectedAccount() { AccountInfo accountInfo = null; DefaultMutableTreeNode node = (DefaultMutableTreeNode) accountManagerTree.getSelectionPath().getLastPathComponent(); if (node != ACCOUNT_ROOT) { accountInfo = (AccountInfo) node.getUserObject(); } return accountInfo; } /** * 添加賬號 * * @param info 待添加的賬號信息 */ public void addAccount(AccountInfo info) { boolean exist = false; List accounts = XMLConfig.getAllAccounts(); for (int i = 0; i < accounts.size(); i++) { AccountInfo account = (AccountInfo) accounts.get(i); if (account.equals(info)) { exist = true; break; } } if (exist == true) { JOptionPane.showMessageDialog(Smart.getInstance(), "您要添加的賬號已經存在,不能添加!", StringShop.HINT_TITLE, JOptionPane.INFORMATION_MESSAGE); accountInfoPanel.setValue(null); accountInfoPanel.inactivate(); ActionCenter.getInstance().setActionWhenSelectAccountManager(); } else { XMLConfig.addAccount(info, true); DefaultMutableTreeNode child = new DefaultMutableTreeNode(info); int index = ACCOUNT_ROOT.getChildCount(); accountManagerModel.insertNodeInto(child, ACCOUNT_ROOT, index); accountManagerTree.setSelectionRow(index + 1); } } /** * 編輯賬號 * * @param oldInfo 編輯前的賬號信息 * @param newInfo 編輯后的賬號信息 */ public void editAccount(AccountInfo oldInfo, AccountInfo newInfo) { boolean exist = false; List accounts = XMLConfig.getAllAccounts(); int i; for (i = 0; i < accounts.size(); i++) { AccountInfo account = (AccountInfo) accounts.get(i); if (account.equals(oldInfo)) { break; } } for (int j = 0; j < accounts.size(); j++) { if (j != i) { AccountInfo account = (AccountInfo) accounts.get(j); if (account.equals(newInfo)) { exist = true; break; } } } if (exist == true) { JOptionPane.showMessageDialog(Smart.getInstance(), "您編輯后的賬號已經存在,不能編輯!", StringShop.HINT_TITLE, JOptionPane.INFORMATION_MESSAGE); } else { accounts.remove(i); accounts.add(i, newInfo); XMLConfig.deleteAllAccounts(false); XMLConfig.addAllAccounts(accounts, true); } int row = accountManagerTree .getRowForPath(accountManagerTree.getSelectionPath()); reloadAccounts(); accountManagerTree.setSelectionRow(row); } /** * 刪除選中的賬號 */ public void deleteSelectedAccount() { DefaultMutableTreeNode node = (DefaultMutableTreeNode) accountManagerTree.getSelectionPath().getLastPathComponent(); if (node != ACCOUNT_ROOT) { AccountInfo accountInfo = (AccountInfo) node.getUserObject(); XMLConfig.deleteAccount(accountInfo, true); int row = accountManagerTree .getRowForPath(accountManagerTree.getSelectionPath()); accountManagerModel.removeNodeFromParent(node); accountManagerTree.setSelectionRow(row - 1); } } /** * 裝載賬號 */ private void loadAccounts() { List accounts = XMLConfig.getAllAccounts(); for (int i = 0; i < accounts.size(); i++) { Object obj = accounts.get(i);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -