JAVA--好友界面面板
package GongYou; //package windows.best_demo; import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*; /**
* <P>Title:OpenSwing </P>
* <P>Description: JGroupPanel 组群面板
* 类似QQ界面的组群管理面板
* </P>
* 履历:
* 2004/07/24 由SunKing作成
* <P>Copyright: Copyright (c) 2004</P>
* <P>Company: </P>
* @author <A href="mailto:sunkingxie@hotmail.com" mce_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 成员组件
*/
public void insertMember(int groupIndex, int memberIndex, Component member) {
getGroup(groupIndex).addMember(memberIndex, member);
} /**
* 从组中移除成员组件
* @param groupIndex int
* @param memberIndex int
*/
public void removeMember(int groupIndex, int memberIndex) {
getGroup(groupIndex).removeMember(memberIndex);
} /**
* 取得成员组件
* @param groupIndex int 组的顺序号
* @param memberIndex int 成员组件的顺序号
* @return Component 成员组件
*/
public Component getMember(int groupIndex, int memberIndex) {
return getGroup(groupIndex).getMember(memberIndex);
} /**
* 取得全部成员组件
* @param groupIndex int 组的顺序号
* @return Component[] 全部成员组件
*/
public Component[] getMembers(int groupIndex) {
return getGroup(groupIndex).getMembers();
} /**
* 取得成员组件的总数
* @param groupIndex int 组的顺序号
* @return int 总数
*/
public int getMemberCount(int groupIndex) {
return getGroup(groupIndex).getMemberCount();
} /**
* 取得组
* @param index int 组的顺序号
* @return JGroupContainer 组
*/
protected JGroupContainer getGroup(int index) {
return (JGroupContainer) groupList.get(index);
} /**
* 覆写的addImpl方法,禁止再向JGroupPane中添加组件
* @param comp Component
* @param constraints Object
* @param index int
*/
protected void addImpl(Component comp, Object constraints, int index) {
if (forbidFlag) {
if (! (comp instanceof JGroupContainer)) {
throw new UnsupportedOperationException(
"JGroupPane can't add component!");
}
}
else {
super.addImpl(comp, constraints, index);
}
} /**
* <P>Title: OpenSwing</P>
* <P>Description: 组面板布局管理器</P>
* <P>Copyright: Copyright (c) 2004</P>
* <P>Company: </P>
* @author <A href="mailto:sunkingxie@hotmail.com" mce_href="mailto:sunkingxie@hotmail.com">SunKing</A>
* @version 1.0
*/
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();
}
} /**
* <P>Title: OpenSwing</P>
* <P>Description: 组</P>
* <P>Copyright: Copyright (c) 2004</P>
* <P>Company: </P>
* @author <A href="mailto:sunkingxie@hotmail.com" mce_href="mailto:sunkingxie@hotmail.com">SunKing</A>
* @version 1.0
*/
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"));
} /**
* @param name String 组名
* @param background Color 成员组件所在面板背景色
*/
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("ScrollBar.trackHighlight", background);
sp = new JScrollPane(pMembers);
sp.setHorizontalScrollBarPolicy(
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
this.add(sp, BorderLayout.CENTER);
collapse();
UIManager.put("ScrollBar.thumb", thumbColor);
UIManager.put("ScrollBar.track", trackColor);
UIManager.put("ScrollBar.trackHighlight", trackHighlightColor); } /**
* 设置间距
* @param hgap int 横间距
* @param vgap int 竖间距
*/
public void setMemberGap(int hgap, int vgap) {
pMembers.setLayout(new GroupLayout(hgap, vgap));
} /**
* 取得组的标题按钮
* @return JButton
*/
public JButton getTitleButton() {
return bttGroupTitle;
} /**
* 取得组的成员组件面板
* @return JPanel
*/
public JPanel getMembersContainer() {
return pMembers;
} /**
* 收缩组
*/
public void collapse() {
sp.setVisible(false);
this.revalidate();
} /**
* 展开组
*/
public void expand() {
sp.setVisible(true);
this.revalidate();
} /**
* 设置组名
* @param name String 组名
*/
public void setName(String name) {
bttGroupTitle.setText(name);
} /**
* 取得组名
* @return String
*/
public String getName() {
return bttGroupTitle.getText();
} /**
* 添加一个成员组件
* @param index int 顺序号
* @param c Component 成员组件
*/
public void addMember(int index, Component c) {
pMembers.add(c, index);
pMembers.doLayout();
} /**
* 删除一个成员组件
* @param index int 顺序号
*/
public void removeMember(int index) {
pMembers.remove(index);
pMembers.doLayout();
} /**
* 取得一个成员组件
* @param index int 顺序号
* @return Component 成员组件
*/
public Component getMember(int index) {
return pMembers.getComponent(index);
} /**
* 取得全部成员组件
* @return Component[] 成员组件
*/
public Component[] getMembers() {
Component coms[] = new Component[getMemberCount()];
for (int i = 0; i < coms.length; i++) {
coms[i] = pMembers.getComponent(i);
}
return coms;
} /**
* 取得成员组件总数
* @return int 总数
*/
public int getMemberCount() {
return pMembers.getComponentCount();
} /**
* 重写的toString方法
* @return String
*/
public String toString() {
return getName();
}
} /**
/**
* 测试程序
* @param args String[]
*/
public static void main(String[] args) {
// try {
// UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
// }
// catch (Exception e) {
// }
JFrame frame = new JFrame();
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("JGroupPanel Demo");
frame.getContentPane().setLayout(new BorderLayout());
JGroupPanel p = new JGroupPanel();
frame.getContentPane().add(p, BorderLayout.CENTER); frame.setSize(150, 600);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation(d.width - frame.getSize().width - 10,
10);
frame.setVisible(true);
} }
JAVA--好友界面面板的更多相关文章
- Java 图形界面开发--图文并茂建立学生管理系统
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/50932501 冷血之心的博客) 图形用户界面(Graphics U ...
- Java图形界面GUI
Java图形界面GUI 设置窗体JFrame对象 package com.Aha.Best; import javax.swing.ImageIcon; import javax.swing.JFra ...
- JAVA的界面(Swing)
现在的程序很多在java中运行,很多时候是Web;很多服务端还是有一个简单的日志文件比较好:或者配置: 今天在看java图形界面开发时,看见已经不怎么更新的库.没有办法,市场决定一切,很多好的东西没有 ...
- GuideActivity.java引导界面:
这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api. 而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等.那 ...
- Java图形界面学习---------简易登录界面
/** * @author Administrator * Java图形界面学习---------简易登录界面 * date:2015/10/31 */ import java.awt.BorderL ...
- Java图形界面开发—简易登录注册小程序
登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象.本例中如果有注释不详细的地方,详见其它博客. Java程序操作数据库SQLserver详解 功能介绍:简单的登录注册系统,使用了数据库 ...
- Java图形界面(GUI)——如何将JTable成功放入面板
在这次课程设计中,大部分内容都设计的很流畅,没有遇到太大的问题,但在面板中加入JTable时确实花费了一部分时间,在此将解决办法总结出来: 定义控件: JPanel panel = new JPane ...
- 用java单例模式实现面板切换
1.首先介绍一下什么是单例模式: java单例模式是一种常见的设计模式,那么我们先看看懒汉模式: public class Singleton_ { //设为私有方法,防止被外部类引用或实例 priv ...
- 以小时候玩的贪吃蛇为例,对于Java图像界面的学习感悟
简介 正文 01.JFrame是啥? 02.JPanel 03. KeyListener 04.Runnable 05.游戏Running 06.游戏初始类编写 07.main 简介: 一直以来用代码 ...
- java图形界面写个小桌面,内置简单小软件
一.做个这样的效果,双击图标打开相应的应用 二.主界面类,使用JavaSwing的JDesktopPane类创建这个桌面 package com.swing; import java.awt.Bord ...
随机推荐
- 总结:如何获取同一个DIV里的多个不同子标签的值,并赋值给input?
这个问题说起来简单,但对于新手来说,也着实卡了好久,并且我在网上搜了好久没能找到合适的答案, 于是去博问问了一下,得到许多大神们的帮助与回答,接下来我就总结一下能够实现这个效果的几种方法,既为了自己更 ...
- Struts2 UI标签
表单标签的共同属性(该属性只在没有使用 simple 主题时才可以使用) form 标签 用来呈现 HTML 语言中的表单元素 默认情况下, form 标签将被呈现为一个表格形式的 HTML 表单. ...
- phpcms v9 分页
phpcms的分页很简单,只需在需要分页的地方写入如下代码即可: <div id="pages">{$pages}</div> 连样式都有了,如果你是调用的 ...
- DEDE常见问题(转)
问题1. 把数据保存到数据库附加表 `dede_addonvisa` 时出错,请把相关信息提交给DedeCms官方.Unknown column 'redirecturl' in 'field lis ...
- js 解析 json
1.简单的json格式 { "user": [ { "name":"name1", "age":24, "se ...
- 将日志写入Debug窗口
定义在NuGet包“Microsoft.Extensions.Logging.Debug”中的DebugLogger会直接调用Debug的WriteLine方法来写入分发给它的日志消息.如果需要使用D ...
- Dropbox可伸缩性设计最佳实践分享
http://www.infoq.com/cn/news/2012/11/dropbox-scale-bestpractice Dropbox的运维工程师Rajiv,跟大家分享了可伸缩性设计的最佳实践 ...
- [SQL注入3]from_sqli_to_shell_II
[SQL注入1]这关学习盲注 ,这篇还有些东西没理透,后面搞明白了再修改. http://www.pentesterlab.com/exercises/from_sqli_to_shell_II/ 准 ...
- Android隐藏标题栏
打开程序,在onCreate()方法中添加如下代码: protected void onCreate(Bundle savedInstanceState) { super.onCreate(saved ...
- Altium中Fill,Polygon Pour,Plane的区别和用法
Fill:表示绘制一块实心的铜皮,将区域中的所有连线和过孔连接在一块,而不考虑是否属于同一个网络.假如所绘制的区域中有VCC和GND两个网络,用Fill命令会把这两个网络的元素连接在一起,这样就有可能 ...