?? addresspanel.java
字號:
/* * @(#) AddressPanel.java * Copyright 2004 HWStudio. All rights reserved. */package hws.item.smart.panel.function.admin;//導(dǎo)入核心Java類庫import java.awt.Insets;import java.awt.FlowLayout;import java.awt.GridBagLayout;import java.awt.GridBagConstraints;import java.util.List;import java.util.ArrayList;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTable;import javax.swing.JButton;import javax.swing.JSplitPane;import javax.swing.JScrollPane;import javax.swing.ListSelectionModel;import javax.swing.event.ListSelectionEvent;import javax.swing.event.ListSelectionListener;import javax.swing.table.DefaultTableModel;//導(dǎo)入自定義Java類庫import hws.item.smart.misc.ImageShop;import hws.item.smart.misc.SBChanger;import hws.item.smart.panel.function.admin.misc.OptionalInfoPanel;import hws.item.smart.action.admin.address.StopAddressAction;import hws.item.smart.action.admin.address.StartAddressAction;import hws.item.smart.action.admin.address.RestartAddressAction;import hws.item.smart.utility.chat.OptionalInfo;import hws.item.smart.utility.admin.XMLAccessor;import hws.item.smart.utility.admin.AddressService;/** * 地址服務(wù)面板 * * @version 0.1 2005-08-30 * @author Hwerz */public class AddressPanel extends JPanel { /*------------------------------------------------------------------------* * 屬性定義 * *------------------------------------------------------------------------*/ /** * 該類自身的一個(gè)靜態(tài)引用 */ private static AddressPanel panel; /** * 地址信息面板 */ private AddressInfoPanel addressInfoPanel; /** * 可選信息面板 */ private OptionalInfoPanel optionalInfoPanel; /*------------------------------------------------------------------------* * 構(gòu)造函數(shù) * *------------------------------------------------------------------------*/ /** * 構(gòu)造函數(shù)為私有,這樣在整個(gè)運(yùn)行過程中該類就只能有一個(gè)實(shí)例 */ private AddressPanel() { super(new GridBagLayout()); //啟動(dòng)地址服務(wù) AddressService.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); //分割條面板 optionalInfoPanel = new OptionalInfoPanel(); addressInfoPanel = new AddressInfoPanel(); JSplitPane spliter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, false, addressInfoPanel, optionalInfoPanel); 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); } /*------------------------------------------------------------------------* * 公共方法 * *------------------------------------------------------------------------*/ /** * 對該類提供的一個(gè)全局訪問點(diǎn),用來實(shí)例化該對象 * * @return 該類唯一的一個(gè)實(shí)例 */ public static AddressPanel getInstance() { if (panel == null) { panel = new AddressPanel(); } return panel; } /** * 上線 * * @param id ID * @param nickname 昵稱 * @param ip IP地址 */ public void online(String id, String nickname, String ip) { addressInfoPanel.addRow(id, nickname, ip); } /** * 下線 * * @param id ID */ public void offline(String id) { addressInfoPanel.deleteRow(id); } /** * 返回指定用戶的IP * * @param id ID * @return 指定用戶的IP */ public String getIP(String id) { return addressInfoPanel.getIP(id); } /** * 判斷指定的用戶是否在線 * * @param id ID * @return 如果指定的用戶在線則返回true,否則返回false */ public boolean isOnline(String id) { return addressInfoPanel.isRowExist(id); } /** * 返回所有在線用戶 * * @return 所有在線用戶 */ public List getAllOnlineUsers() { return addressInfoPanel.getAllOnlineUsers(); } /*------------------------------------------------------------------------* * 內(nèi)部類 * *------------------------------------------------------------------------*/ /** * 工具欄面板 */ class Toolbar extends JPanel { /** * Create a new instance of this class */ public Toolbar() { super(new FlowLayout(FlowLayout.CENTER, 5, 0)); //啟動(dòng)服務(wù) JButton button = new JButton(StartAddressAction.getInstance()); button.setIcon(ImageShop.START_IMAGEICON); button.addMouseListener(new SBChanger( StartAddressAction.getInstance().getHintInfo(), false)); add(button); //停止服務(wù) button = new JButton(StopAddressAction.getInstance()); button.setIcon(ImageShop.STOP_IMAGEICON); button.addMouseListener(new SBChanger( StopAddressAction.getInstance().getHintInfo(), false)); add(button); //重啟服務(wù) button = new JButton(RestartAddressAction.getInstance()); button.setIcon(ImageShop.RESTART_IMAGEICON); button.addMouseListener(new SBChanger( RestartAddressAction.getInstance().getHintInfo(), false)); add(button); } } /** * 地址信息面板 */ class AddressInfoPanel extends JPanel implements ListSelectionListener { /** * 地址信息表格的視圖 */ private JTable addressTable; /** * 地址信息表格的模型 */ private DefaultTableModel addressModel; /** * Create a new instance of this class */ public AddressInfoPanel() { super(new GridBagLayout()); //用戶地址標(biāo)簽 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); //地址信息表格 Object[] header = {"ID", "昵稱", "IP"}; addressModel = new DefaultTableModel(); addressModel.setColumnIdentifiers(header); addressTable = new JTable(addressModel) { public boolean isCellEditable(int row, int column) { return false; } }; addressTable.getSelectionModel().addListSelectionListener(this); addressTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); JScrollPane scroller = new JScrollPane(addressTable, 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); } /** * 添加記錄 * * @param id ID * @param nickname 昵稱 * @param ip IP地址 */ public void addRow(String id, String nickname, String ip) { int count = addressModel.getRowCount(); addressModel.addRow(new Object[] {id, nickname, ip}); addressTable.getSelectionModel().setSelectionInterval(count, count); OptionalInfo info = XMLAccessor.getUser(id).getOptionalInfo(); optionalInfoPanel.setValue(info); } /** * 刪除記錄 * * @param id ID */ public void deleteRow(String id) { for (int i = 0; i < addressModel.getRowCount(); i++) { if (addressModel.getValueAt(i, 0).equals(id) == true) { addressModel.removeRow(i); break; } } if (addressModel.getRowCount() > 0) { addressTable.getSelectionModel().setSelectionInterval(0, 0); } } /** * 返回指定用戶的IP * * @param id ID * @return 指定用戶的IP */ public String getIP(String id) { String ip = null; int count = addressModel.getRowCount(); for (int i = 0; i < count; i++) { if (addressModel.getValueAt(i, 0).equals(id) == true) { ip = String.valueOf(addressModel.getValueAt(i, 2)); break; } } return ip; } /** * 判斷指定的用戶是否已經(jīng)存在 * * @param id 指定用戶的ID * @return 如果指定的用戶已經(jīng)存在則返回true,否則返回false */ public boolean isRowExist(String id) { boolean exist = false; for (int i = 0; i < addressModel.getRowCount(); i++) { if (addressModel.getValueAt(i, 0).equals(id) == true) { exist = true; break; } } return exist; } /** * 返回所有在線用戶 * * @return 所有在線用戶 */ public List getAllOnlineUsers() { List users = new ArrayList(); for (int i = 0; i < addressModel.getRowCount(); i++) { users.add(addressModel.getValueAt(i, 0)); } return users; } /** * 實(shí)現(xiàn)接口ListSelectionListener的方法 * * @param event the event that characterizes the change */ public void valueChanged(ListSelectionEvent event) { if (addressModel.getRowCount() > 0) { int row = addressTable.getSelectedRow(); String id = addressModel.getValueAt(row, 0).toString(); OptionalInfo info = XMLAccessor.getUser(id).getOptionalInfo(); optionalInfoPanel.setValue(info); } } }}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -