/*
* $Id: ExpandableBorderPanel.java,v 1.1 2010-11-23 15:33:34 illetsch Exp $
* © 3kraft GmbH & Co KG 2009
*/
package com.dreikraft.swing;
import java.awt.Component;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
/**
* A Panel that can be shown and hidden when clicking on the border.
*
* @author jan_solo
* @author $Author: illetsch $
* @version $Revision: 1.1 $
*/
public class ExpandableBorderPanel extends JPanel
{
private String title;
private boolean expanded = true;
private boolean expandable = false;
/** Creates new form ExpandableBorderPanel */
public ExpandableBorderPanel()
{
initComponents();
}
@SuppressWarnings("unchecked")
private void initComponents()
{
setBorder(javax.swing.BorderFactory.createTitledBorder(""));
addMouseListener(new java.awt.event.MouseAdapter()
{
@Override
public void mouseClicked(java.awt.event.MouseEvent evt)
{
formMouseClicked(evt);
}
});
setLayout(new java.awt.BorderLayout());
}
private void formMouseClicked(java.awt.event.MouseEvent evt)
{
if (getComponentCount() > 0 && expandable)
{
setExpanded(!isExpanded());
}
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
if (getBorder() instanceof TitledBorder)
{
if (isExpandable())
{
((TitledBorder) getBorder()).setTitle(title + " " + (isExpanded()
? "\u02c4" : "\u02c5"));
}
else
{
((TitledBorder) getBorder()).setTitle(title);
}
}
}
public boolean isExpanded()
{
return expanded;
}
public void setExpanded(boolean expanded)
{
this.expanded = expanded;
for (Component component : getComponents())
{
component.setVisible(expanded);
}
if (getBorder() instanceof TitledBorder)
{
((TitledBorder) getBorder()).setTitle(title + " " + (isExpanded()
? "\u02c4" : "\u02c5"));
}
}
public boolean isExpandable()
{
return expandable;
}
public void setExpandable(boolean expandable)
{
this.expandable = expandable;
if (getBorder() instanceof TitledBorder)
{
if (isExpandable())
{
((TitledBorder) getBorder()).setTitle(title + " " + (isExpanded()
? "\u02c4" : "\u02c5"));
}
else
{
((TitledBorder) getBorder()).setTitle(title);
}
}
}
}