?? friendpanel.java
字號:
/* * @(#) FriendPanel.java * Copyright 2004 HWStudio. All rights reserved. */package hws.item.smart.panel.function.admin;//導入核心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.JSplitPane;import javax.swing.JScrollPane;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.misc.ImageShop;import hws.item.smart.misc.SBChanger;import hws.item.smart.panel.function.admin.misc.UserInfoPanel;import hws.item.smart.action.admin.friend.StopFriendAction;import hws.item.smart.action.admin.friend.StartFriendAction;import hws.item.smart.action.admin.friend.RestartFriendAction;import hws.item.smart.utility.chat.UserInfo;import hws.item.smart.utility.admin.XMLAccessor;import hws.item.smart.utility.admin.FriendService;/** * 好友服務面板 * * @version 0.1 2005-08-22 * @author Hwerz */public class FriendPanel extends JPanel { /*------------------------------------------------------------------------* * 屬性定義 * *------------------------------------------------------------------------*/ /** * 好友樹根節點 */ private static final DefaultMutableTreeNode FRIEND_ROOT = new DefaultMutableTreeNode("用戶好友"); /** * 該類自身的一個靜態引用 */ private static FriendPanel panel; /** * 好友視圖面板 */ private FriendViewPanel friendViewPanel; /** * 用戶信息面板 */ private UserInfoPanel userInfoPanel; /*------------------------------------------------------------------------* * 構造函數 * *------------------------------------------------------------------------*/ /** * 構造函數為私有,這樣在整個運行過程中該類就只能有一個實例 */ private FriendPanel() { super(new GridBagLayout()); //啟動好友服務 FriendService.getInstance().start(); //工具欄面板 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); //分割條面板 userInfoPanel = new UserInfoPanel(); friendViewPanel = new FriendViewPanel(); JSplitPane spliter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, false, friendViewPanel, userInfoPanel); 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 FriendPanel getInstance() { if (panel == null) { panel = new FriendPanel(); } return panel; } /** * 刷新 */ public void refresh() { friendViewPanel.reloadFriends(); } /*------------------------------------------------------------------------* * 內部類 * *------------------------------------------------------------------------*/ /** * 工具欄面板 */ class Toolbar extends JPanel { /** * Create a new instance of this class */ public Toolbar() { super(new FlowLayout(FlowLayout.CENTER, 5, 0)); //啟動服務 JButton button = new JButton(StartFriendAction.getInstance()); button.setIcon(ImageShop.START_IMAGEICON); button.addMouseListener(new SBChanger( StartFriendAction.getInstance().getHintInfo(), false)); add(button); //停止服務 button = new JButton(StopFriendAction.getInstance()); button.setIcon(ImageShop.STOP_IMAGEICON); button.addMouseListener(new SBChanger( StopFriendAction.getInstance().getHintInfo(), false)); add(button); //重啟服務 button = new JButton(RestartFriendAction.getInstance()); button.setIcon(ImageShop.RESTART_IMAGEICON); button.addMouseListener(new SBChanger( RestartFriendAction.getInstance().getHintInfo(), false)); add(button); } } /** * 好友視圖面板 */ class FriendViewPanel extends JPanel implements TreeSelectionListener { /** * 好友樹的視圖 */ private JTree friendTree; /** * 好友樹的模型 */ private DefaultTreeModel friendModel; /** * Create a new instance of this class */ public FriendViewPanel() { 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); //樹型組件 friendModel = new DefaultTreeModel(FRIEND_ROOT); friendTree = new JTree(friendModel); friendTree.addTreeSelectionListener(this); loadFriends(); setTree(); setTreeCellRenderer(); JScrollPane scroller = new JScrollPane(friendTree, 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); } /** * 重載好友 */ public void reloadFriends() { unloadFriends(); loadFriends(); } /** * 裝載好友 */ private void loadFriends() { List users = XMLAccessor.getAllUsers(); for (int i = 0; i < users.size(); i++) { UserInfo info = (UserInfo) users.get(i); DefaultMutableTreeNode child = new DefaultMutableTreeNode(info); List friends = info.getFriendsInfo().getAllFriends(); for (int j = 0; j < friends.size(); j++) { String id = String.valueOf(friends.get(j)); DefaultMutableTreeNode child2 = new DefaultMutableTreeNode(XMLAccessor.getUser(id)); child.add(child2); } friendModel.insertNodeInto(child, FRIEND_ROOT, i); } friendTree.expandRow(0); friendTree.setSelectionRow(0); } /** * 卸載好友 */ private void unloadFriends() { int count = FRIEND_ROOT.getChildCount(); for (int i = 0; i < count; i++) { friendModel.removeNodeFromParent( (DefaultMutableTreeNode) FRIEND_ROOT.getChildAt(0)); } } /** * 設置樹型組件的附加選項 */ private void setTree() { DefaultTreeSelectionModel model = new DefaultTreeSelectionModel(); model.setSelectionMode(model.SINGLE_TREE_SELECTION); friendTree.setSelectionModel(model); friendTree.setSelectionRow(0); friendTree.expandRow(0); } /** * 設置樹型組件的單元格渲染器 */ private void setTreeCellRenderer() { final DefaultTreeCellRenderer renderer1 = (DefaultTreeCellRenderer) friendTree.getCellRenderer(); DefaultTreeCellRenderer renderer2 = new DefaultTreeCellRenderer() { public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { Component c = renderer1.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); JLabel label = (JLabel) c; if (value == FRIEND_ROOT) { label.setIcon(ImageShop.USER_ROOT_IMAGEICON); } else { label.setIcon(ImageShop.USER_IMAGEICON); } return c; } }; friendTree.setCellRenderer(renderer2); } /** * 實現TreeSelectionListener接口的方法 * * @param event TreeSelectionEvent對象 */ public void valueChanged(TreeSelectionEvent event) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) event .getPath().getLastPathComponent(); if (node == FRIEND_ROOT) { userInfoPanel.setValue(null); } else { UserInfo info = (UserInfo) node.getUserObject(); userInfoPanel.setValue(info); } } }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -