您的位置:首页 > 其它

swing使用布局实现伸缩面板

2016-02-20 11:48 281 查看
首先定义一个垂直布局类
public class VerticalLayout implements LayoutManager {

private final int space;

public VerticalLayout() {
this(0);
}

public VerticalLayout(int space) {
this.space = space;
}
@Override
public Dimension minimumLayoutSize(Container parent) {
Dimension r = new Dimension(0,0);
for (Component c : parent.getComponents()) {
Dimension d = c.getMinimumSize();
r.width = Math.max(r.width, d.width);
r.height += d.height;
}
return r;
}

@Override
public void layoutContainer(Container parent) {
int y = 0;
for (Component c : parent.getComponents()) {
if (c.isVisible()) {
if (c instanceof ItemLabel && y > 0) {
y += space;
}
Dimension d = c.getPreferredSize();
c.setBounds(0, y, parent.getWidth(), d.height);
y += d.height;
}
}
}
然后定义一个面板类:
public class ExpandPanel  extends JComponent
setLayout(new VerticalLayout(space));
使用此垂直布局,增加一些方法:
public void addItem(ExpandItem item) {
items.add(item);
add(item.getTitle());
add(item.getPanel());
}

public void select(int index) {
if (index <items.size()) {
for (int i=0; i<items.size(); i++) {
ExpandItem item = items.get(index);
item.setVisible(index == i);
}
}
}
ExpandItem为一个带标签的面板,结构如下:
public class ExpandItem {

private ItemLabel title;
private final JPanel pnlItems ;
class ItemLabel extends JLabel {...}
效果如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: