📄 jgrouppanel.java
字号:
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">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">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);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -