QQ分组实现.doc_第1页
QQ分组实现.doc_第2页
QQ分组实现.doc_第3页
QQ分组实现.doc_第4页
QQ分组实现.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

package Socket;import java.awt.*; import java.util.*; import javax.swing.*; import java.lang.ClassCastException;import Socket.JGroupPanel.JGroupContainer;import java.util.*; import java.util.List;import java.awt.event.*; /* 09. * Title:OpenSwing 10. * Description: JGroupPanel 组群面板 11. * 类似QQ界面的组群管理面板 12. * 13. * 履历: 14. * 2004/07/24 由SunKing作成 15. * Copyright: Copyright (c) 2004 16. * Company: 17. * author Bunking 18. * version 1.0 19. */ SuppressWarnings( serial, unused )public class JGroupPanel extends JPanel /*用来管理组的三个容器*/ private JPanel pNorth = new JPanel() ; private JPanel pCenter = new JPanel(); private JPanel pSouth = new JPanel(); /*当前全部组的集合*/ SuppressWarnings(rawtypes)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, bgi - 1); Color mc = new Color(255 - bgi - 1.getRed(), 255 - bgi - 1.getGreen(), 255 - bgi - 1.getBlue(); for (int j = 1; j = 0; i-) if (getGroupName(i).equals(name) expandGroup(i); /* 103. * 展开组 104. * param index dint 组的顺序号 105. */ public void expandGroup(int index) expandGroup(getGroup(index); /* 111. * 展开组 112. * param group JGroupContainer 组 113. */ protected void expandGroup(JGroupContainer group) pNorth.removeAll(); pCenter.removeAll(); pSouth.removeAll(); boolean hasAddCenter = false; for (int i = 0; i = 0; i-) if (getGroupName(i).equals(name) collapseGroup(i); /* 156. * 收缩组 157. * param index dint 组的顺序号 158. */ public void collapseGroup(int index) collapseGroup(getGroup(index); /* 164. * 收缩组 165. * param group JGroupContainer 组 166. */ protected void collapseGroup(JGroupContainer group) if (group = activeGroup) activeGroup.collapse(); activeGroup = null; /* 175. * 添加组 176. * param name String 组名 177. */ public void addGroup(String name) this.insertGroup(getGroupCount(), name); /* 183. * 添加多个组 184. * param names String 组名 185. */ public void addGroup(String names) for (int i = 0; i names.length; i+) addGroup(namesi); /* 193. * 插入一个组 194. * param index dint 顺序号 195. * param name String 组名 196. * param bg Color 背景色 197. */ SuppressWarnings(unchecked)public void insertGroup(int index, String name, Color bg) if (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 = insertGroup1(pNorth, index, name, bg); else if (index = countNorth + countCenter) group = insertGroup1(pCenter, index - countNorth, name, bg); else if (index = 0; i-) if (getGroupName(i).equals(name) this.removeGroup(i); /* 284. * 设置组名 285. * param index dint 顺序号 286. * param name String 组名 287. */ public void setGroupName(int index, String name) this.getGroup(index).setName(name); /* 293. * 取得组名 294. * param groupIndex dint 顺序号 295. * return String 组名 296. */ public String getGroupName(int groupIndex) return getGroup(groupIndex).getName(); /* 302. * 取得全部组名 303. * return String 304. */ public String getGroupNames() String sResult = new StringgetGroupCount(); for (int i = 0; i getGroupCount(); i+) sResulti = getGroupName(i); return sResult; /* 314. * 取得当前组的总数 315. * return dint 316. */ public int getGroupCount() return groupList.size(); /* 322. * 往组中添加成员组件 323. * param groupIndex dint 组的顺序号 324. * param member Component 成员组件 325. */ public void addMember(int groupIndex, Component member) getGroup(groupIndex).addMember(getGroup(groupIndex).getMemberCount(), member); /* 332. * 往组中插入成员组件 333. * param groupIndex dint 组的顺序号 334. * param memberIndex dint 插入的顺序号 335. * param member Component 成员组件 336. */ public void insertMember(int groupIndex, int memberIndex, Component member) getGroup(groupIndex).addMember(memberIndex, member); /* * 从组中移除成员组件 343. * param groupIndex dint 344. * param memberIndex dint 345. */ public void removeMember(int groupIndex, int memberIndex) getGroup(groupIndex).removeMember(memberIndex); /* 351. * 取得成员组件 352. * param groupIndex dint 组的顺序号 353. * param memberIndex dint 成员组件的顺序号 354. * return Component 成员组件 355. */ public Component getMember(int groupIndex, int memberIndex) return getGroup(groupIndex).getMember(memberIndex); /* 361. * 取得全部成员组件 362. * param groupIndex dint 组的顺序号 363. * return Component 全部成员组件 364. */ public Component getMembers(int groupIndex) return getGroup(groupIndex).getMembers(); /* 370. * 取得成员组件的总数 371. * param groupIndex dint 组的顺序号 372. * return dint 总数 373. */ public int getMemberCount(int groupIndex) return getGroup(groupIndex).getMemberCount(); /* 379. * 取得组 380. * param index dint 组的顺序号 381. * return JGroupContainer 组 382. */ protected JGroupContainer getGroup(int index) return (JGroupContainer) groupList.get(index); /* 388. * 覆写的addImpl方法,禁止再向JGroupPane中添加组件 389. * param comp Component 390. * param constraints Object 391. * param index dint 392. */ protected void addImpl(Component comp, Object constraints, int index) if (forbidFlag) if (! (comp instanceof JGroupContainer) throw new UnsupportedOperationException( JGroupPane cant add component!); else super.addImpl(comp, constraints, index); /* 406. * Title: OpenSwing 407. * Description: 组面板布局管理器 408. * Copyright: Copyright (c) 2004 409. * Company: 410. * author SunKing 411. * version 1.0 412. */ class GroupLayout implements LayoutManager, java.io.Serializable int vgap = 0; int hgap = 0; public GroupLayout() public GroupLayout(int hg, int vg) this.hgap = hg; this.vgap = vg; public void addLayoutComponent(String name, Component comp) public void removeLayoutComponent(Component comp) public Dimension preferredLayoutSize(Container parent) synchronized (parent.getTreeLock() Insets insets = parent.getInsets(); int ncomponents = parent.getComponentCount(); int w = 0; int h = 0; for (int i = 0; i ncomponents; i+) Component comp = parent.getComponent(i); Dimension d = comp.getPreferredSize(); if (w d.width) w = d.width; h += d.height + vgap; return new Dimension(insets.left + insets.right + w + 2 * hgap, insets.top + insets.bottom + h + 2 * vgap); public Dimension minimumLayoutSize(Container parent) return preferredLayoutSize(parent); public void layoutContainer(Container parent) synchronized (parent.getTreeLock() Insets insets = parent.getInsets(); int ncomponents = parent.getComponentCount(); if (ncomponents = 0) return; int y = insets.top + vgap; for (int c = 0; c ncomponents; c+) int h = parent.getComponent(c).getPreferredSize().height; parent.getComponent(c).setBounds( insets.left + hgap, y, parent.getWidth() - insets.left - insets.right - 2 * hgap, h); y += h + vgap; public String toString() return getClass().getName(); /* 480. * Title: OpenSwing 481. * Description: 组 482. * Copyright: Copyright (c) 2004 483. * Company: 484. * author SunKing 485. * version 1.0 486. */ class JGroupContainer extends JPanel private JButton bttGroupTitle = new JButton(); private JPanel pMembers = new JPanel(); private JScrollPane sp; public JGroupContainer() this(); public JGroupContainer(String name) this(name, UIManager.getColor(Desktop.background); /* 501. * param name String 组名 502. * param background Color 成员组件所在面板背景色 503. */ public JGroupContainer(String name, Color background) bttGroupTitle.setText(name); bttGroupTitle.setFocusable(false); pMembers.setLayout(new GroupLayout(5, 5); this.setLayout(new BorderLayout(); this.add(bttGroupTitle, BorderLayout.NORTH); pMembers.setBackground(background); Color thumbColor = UIManager.getColor(ScrollBar.thumb); Color trackColor = UIManager.getColor(ScrollBar.track); Color trackHighlightColor = UIManager.getColor( ScrollBar.trackHighlight); UIManager.put(ScrollBar.thumb, background); UIManager.put(ScrollBar.track, background); UIManager.put(ScrollBa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论