版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vcshcn/article/details/50703959
首先定义一个垂直布局类
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 {...}
效果如下: