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

📄 addresspanel.java

📁 该系统是一个基于p2p的即时聊天系统
💻 JAVA
字号:
/* * @(#) AddressPanel.java * Copyright 2004 HWStudio. All rights reserved. */package hws.item.smart.panel.function.admin;//导入核心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;//导入自定义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;/** * 地址服务面板 * * @version 0.1 2005-08-30 * @author Hwerz */public class AddressPanel extends JPanel {    /*------------------------------------------------------------------------*     *                                属性定义                                *     *------------------------------------------------------------------------*/    /**     * 该类自身的一个静态引用     */    private static AddressPanel panel;    /**     * 地址信息面板     */    private AddressInfoPanel addressInfoPanel;    /**     * 可选信息面板     */    private OptionalInfoPanel optionalInfoPanel;    /*------------------------------------------------------------------------*     *                                构造函数                                *     *------------------------------------------------------------------------*/    /**     * 构造函数为私有,这样在整个运行过程中该类就只能有一个实例     */    private AddressPanel() {        super(new GridBagLayout());        //启动地址服务        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);    }    /*------------------------------------------------------------------------*     *                                公共方法                                *     *------------------------------------------------------------------------*/    /**     * 对该类提供的一个全局访问点,用来实例化该对象     *     * @return 该类唯一的一个实例     */    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();    }    /*------------------------------------------------------------------------*     *                                 内部类                                 *     *------------------------------------------------------------------------*/    /**     * 工具栏面板     */    class Toolbar extends JPanel {        /**         * Create a new instance of this class         */        public Toolbar() {            super(new FlowLayout(FlowLayout.CENTER, 5, 0));            //启动服务            JButton button = new JButton(StartAddressAction.getInstance());            button.setIcon(ImageShop.START_IMAGEICON);            button.addMouseListener(new SBChanger(                StartAddressAction.getInstance().getHintInfo(), false));            add(button);            //停止服务            button = new JButton(StopAddressAction.getInstance());            button.setIcon(ImageShop.STOP_IMAGEICON);            button.addMouseListener(new SBChanger(                StopAddressAction.getInstance().getHintInfo(), false));            add(button);            //重启服务            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());            //用户地址标签            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;        }        /**         * 判断指定的用户是否已经存在         *         * @param id 指定用户的ID         * @return 如果指定的用户已经存在则返回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;        }        /**         * 实现接口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);            }        }    }}

⌨️ 快捷键说明

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