/*
* Folder.java
*
* Created on June 8, 2007, 5:30 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package dyno.swing.beans;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;
import javax.swing.JComponent;
/**
* 该类是个辅助类,实现折叠面板的一个逻辑面板,包括面板caption和内容。
*
* @author William Chen
*/
class Folder extends JComponent {
//缺省caption的高度
private static final int CAPTION_HEIGHT = 25;
//标题组件
private CaptionButton caption;
//放应用程序的抽屉
private Drawer drawer;
/**
* Creates a new instance of Folder
*/
Folder(String label, JComponent comp) {
this(label, true, comp);
}
/**
* @param label 面板标题文字
* @param expanded 面板是否展开
* @param comp 应用程序组件
*/
Folder(String label, boolean expanded, JComponent comp) {
//设置自己的layout
setLayout(new FolderTabLayout());
//生成并添加标题组件
caption = new CaptionButton(label, expanded);
add(caption);
//生成并添加抽屉
drawer = new Drawer(expanded ? 1 : 0, comp);
add(drawer);
}
CaptionButton getCaption() {
return caption;
}
Drawer getDrawer() {
return drawer;
}
//获得该面板目前所需的空间大小:drawer+caption_height
Dimension getRequiredDimension() {
int w = drawer.getContentWidth();
//高度是抽屉的高度加上标题的高度,抽屉的高度是目前抽出的长度
int h = (int) (drawer.getContentHeight() * drawer.getRatio()) +
CAPTION_HEIGHT;
return new Dimension(w, h);
}
/**
* 负责布局面板组件
*/
class FolderTabLayout implements LayoutManager {
public void addLayoutComponent(String name, Component comp) {
}
public void removeLayoutComponent(Component comp) {
}
public Dimension preferredLayoutSize(Container parent) {
return parent.getPreferredSize();
}
public Dimension minimumLayoutSize(Container parent) {
return parent.getMinimumSize();
}
public void layoutContainer(Container parent) {
int w = parent.getWidth();
int h = parent.getHeight();
//标题栏总是固定高度
caption.setBounds(0, 0, w, CAPTION_HEIGHT);
//抽屉只显示抽出的比例
drawer.setBounds(0, CAPTION_HEIGHT, w, h - CAPTION_HEIGHT);
drawer.setContentWidth(w);
}
}
}
转载于:https://blog.51cto.com/8200037/1349192