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 {...}效果如下:
相关文章推荐
- jdk api 获取属性修改通知
- JavaScript日期对象使用总结
- jQuery获得字体颜色16位码的方法
- android wifi
- 系统调用和库函数
- Java NIO之TCP
- 数组元素删除以及数组去重
- 数码相机专业术语解答
- 关于Eclipse创建web项目后 出现jax-ws webservice
- Nios下按键中断
- 【翻译】Leapmotion-python开发官方文档(3)
- Android图片裁剪
- 2016,学无止境,加油!
- javascript中对变量类型的推断
- SMBus
- vs2013调试崩溃,重启电脑依旧崩溃
- JAVA EE(7)
- osg 深拷贝、浅拷贝
- javascript入门实例五
- Java语法初步实际应用