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

📄 jgrouppanel.java

📁 OpenSwing的经典示例
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.sunking.swing;

import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;

/**
 * <p>Title:OpenSwing </p>
 * <p>Description: JGroupPanel 组群面板<BR>
 *  类似QQ界面的组群管理面板
 * </p>
 * 履历:<BR>
 *     2004/07/24   由SunKing作成<BR>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author <a href="mailto:sunkingxie@hotmail.com"'>Sunking</a>
 * @version 1.0
 */
public class JGroupPanel
    extends JPanel {
    /*用来管理组的三个容器*/
    private JPanel pNorth = new JPanel() {
    };
    private JPanel pCenter = new JPanel();
    private JPanel pSouth = new JPanel();

    /*当前全部组的集合*/
    private ArrayList groupList = new ArrayList();

    /*是否已禁止添加组件*/
    private boolean forbidFlag = false;

    /*当前激活的组*/
    private JGroupContainer activeGroup = null;
    transient ActionListener al = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            JButton bttTitle = (JButton) e.getSource();
            expandGroup( (JGroupContainer) bttTitle.getParent());
        }
    };

    private boolean hasCreateDefaultGroup = false;
    public JGroupPanel() {
        initComponents();
        createDefaultGroup();
    }
    private void initComponents(){
        this.setLayout(new BorderLayout());
        this.add(pNorth, BorderLayout.NORTH);
        this.add(pCenter, BorderLayout.CENTER);
        this.add(pSouth, BorderLayout.SOUTH);
        pNorth.setLayout(new GroupLayout());
        pCenter.setLayout(new BorderLayout());
        pSouth.setLayout(new GroupLayout());
        forbidFlag = true;
    }
    private void createDefaultGroup(){
        //Default Group
        Color bg[] = {
            Color.black, Color.red, Color.orange, Color.yellow, Color.green,
            Color.cyan, Color.blue, Color.white};
        for (int i = 1; i <= bg.length; i++) {
            insertGroup(i - 1, "Group " + i, bg[i - 1]);
            Color mc = new Color(255 - bg[i - 1].getRed(),
                                 255 - bg[i - 1].getGreen(),
                                 255 - bg[i - 1].getBlue());
            for (int j = 1; j <= 5; j++) {
                JButton bttMember = new JButton("Member " + j + " of " + i);
                addMember(i - 1, bttMember);
                bttMember.setPreferredSize(new Dimension(1, 40));
                bttMember.setOpaque(false);
                bttMember.setForeground(mc);
            }
            getGroup(i - 1).setMemberGap(20, 5);
            getGroup(i - 1).getTitleButton().setForeground(bg[i - 1]);
        }
        expandGroup(0);
        hasCreateDefaultGroup = true;
    }

    /**
     * @param groupNames String[] 预设组名
     */
    public JGroupPanel(String groupNames[]) {
        initComponents();
        addGroup(groupNames);
    }

    /**
     * 展开组
     * @param name String 组名
     */
    public void expandGroup(String name) {
        for (int i = getGroupCount() - 1; i >= 0; i--) {
            if (getGroupName(i).equals(name)) {
                expandGroup(i);
            }
        }
    }

    /**
     * 展开组
     * @param index int 组的顺序号
     */
    public void expandGroup(int index) {
        expandGroup(getGroup(index));
    }

    /**
     * 展开组
     * @param group JGroupContainer 组
     */
    protected void expandGroup(JGroupContainer group) {
        pNorth.removeAll();
        pCenter.removeAll();
        pSouth.removeAll();
        boolean hasAddCenter = false;
        for (int i = 0; i < groupList.size(); i++) {
            Component c = (Component) groupList.get(i);
            if (hasAddCenter) {
                pSouth.add(c);
            }
            else if (c == group) {
                pCenter.add(c, BorderLayout.CENTER);
                hasAddCenter = true;
            }
            else {
                pNorth.add(c);
            }
        }
        if (activeGroup != null) {
            activeGroup.collapse();
        }
        activeGroup = group;
        activeGroup.expand();
        pNorth.doLayout();
        pCenter.doLayout();
        pSouth.doLayout();
        doLayout();
    }

    /**
     * 收缩组
     * @param name String 组名
     */
    public void collapseGroup(String name) {
        for (int i = getGroupCount() - 1; i >= 0; i--) {
            if (getGroupName(i).equals(name)) {
                collapseGroup(i);
            }
        }
    }

    /**
     * 收缩组
     * @param index int 组的顺序号
     */
    public void collapseGroup(int index) {
        collapseGroup(getGroup(index));
    }

    /**
     * 收缩组
     * @param group JGroupContainer 组
     */
    protected void collapseGroup(JGroupContainer group) {
        if (group == activeGroup) {
            activeGroup.collapse();
            activeGroup = null;
        }
    }

    /**
     * 添加组
     * @param name String 组名
     */
    public void addGroup(String name) {
        this.insertGroup(getGroupCount(), name);
    }

    /**
     * 添加多个组
     * @param names String[] 组名
     */
    public void addGroup(String names[]) {
        for (int i = 0; i < names.length; i++) {
            addGroup(names[i]);
        }
    }

    /**
     * 插入一个组
     * @param index int 顺序号
     * @param name String 组名
     * @param bg Color 背景色
     */
    public void insertGroup(int index, String name, Color bg) {
        if (index < 0 || index > groupList.size()) {
            throw new ArrayIndexOutOfBoundsException("index:" + index +
                " >count:" + groupList.size());
        }
        if(hasCreateDefaultGroup){
            while(getGroupCount()>0){
                removeGroup(0);
            }
            hasCreateDefaultGroup = false;
        }
        int countNorth = pNorth.getComponentCount();
        int countCenter = pCenter.getComponentCount();
        int countSouth = pSouth.getComponentCount();
        JGroupContainer group;
        if (index <= countNorth) {
            group = insertGroup(pNorth, index, name, bg);
        }
        else if (index <= countNorth + countCenter) {
            group = insertGroup(pCenter, index - countNorth, name, bg);
        }
        else if (index <= countNorth + countCenter + countSouth) {
            group = insertGroup(pSouth, index - countNorth - countCenter, name,
                                bg);
        }
        else {
            group = insertGroup(pSouth, countSouth, name, bg);
        }
        group.getTitleButton().addActionListener(al);
        groupList.add(index, group);

    }

    /**
     * 插入一个组
     * @param index int 顺序号
     * @param name String 组名
     */
    public void insertGroup(int index, String name) {
        insertGroup(index, name, UIManager.getColor("Desktop.background"));
    }

    /**
     * 插入一个组
     * @param p JPanel 目标面板
     * @param index int 顺序号
     * @param name String 组名


         /**
      * 插入一个组
      * @param p JPanel 目标面板
      * @param index int 顺序号
      * @param name String 组名
      * @return JGroupContainer
      */
     private JGroupContainer insertGroup(JPanel p, int index, String name,
                                         Color bg) {
         JGroupContainer group = new JGroupContainer(name, bg);
         p.add(group);
         return group;
     }

    /**
     * 删除一个组
     * @param index int 顺序号
     */
    public void removeGroup(int index) {
        JGroupContainer c = (JGroupContainer) groupList.get(index);
        c.getParent().remove(c);
        c.getTitleButton().removeActionListener(al);
    }

    /**
     * 删除一个组
     * @param name String 组名
     */
    public void removeGroup(String name) {
        for (int i = getGroupCount() - 1; i >= 0; i--) {
            if (getGroupName(i).equals(name)) {
                this.removeGroup(i);
            }
        }
    }

    /**
     * 设置组名
     * @param index int 顺序号
     * @param name String 组名
     */
    public void setGroupName(int index, String name) {
        this.getGroup(index).setName(name);
    }

    /**
     * 取得组名
     * @param groupIndex int 顺序号
     * @return String 组名
     */
    public String getGroupName(int groupIndex) {
        return getGroup(groupIndex).getName();
    }

    /**
     * 取得全部组名
     * @return String[]
     */
    public String[] getGroupNames() {
        String sResult[] = new String[getGroupCount()];
        for (int i = 0; i < getGroupCount(); i++) {
            sResult[i] = getGroupName(i);
        }
        return sResult;
    }

    /**
     * 取得当前组的总数
     * @return int
     */
    public int getGroupCount() {
        return groupList.size();
    }

    /**
     * 往组中添加成员组件
     * @param groupIndex int 组的顺序号
     * @param member Component 成员组件
     */
    public void addMember(int groupIndex, Component member) {
        getGroup(groupIndex).addMember(getGroup(groupIndex).getMemberCount(),
                                       member);
    }

    /**
     * 往组中插入成员组件
     * @param groupIndex int 组的顺序号
     * @param memberIndex int 插入的顺序号
     * @param member Component 成员组件
     */

⌨️ 快捷键说明

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