import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.LayoutManager;
import java.awt.PopupMenu;
import java.awt.RenderingHints;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
public class TitledPanel extends JPanel {
private String title;
private Font titleFont;
private boolean gradient;
private Color titleColor;
private Color gradientColor1;
private Color gradientColor2;
private JPanel titlePanel;
private JPanel contentPanel;
private JLabel titleLbl;
public TitledPanel(String title, LayoutManager mgr) {
setLayout(new BorderLayout());
this.title = title;
init();
contentPanel.setLayout(mgr);
add(contentPanel, BorderLayout.CENTER);
setBorder(new LineBorder(gradientColor1, 1, true));
}
public TitledPanel(String title, Font titleFont, Color titleColor, Color gradientColor1,
Color gradientColor2, boolean gradient, LayoutManager mgr) {
setLayout(new BorderLayout());
this.title = title;
init(titleFont, titleColor, gradientColor1, gradientColor2, gradient);
contentPanel.setLayout(mgr);
add(contentPanel, BorderLayout.CENTER);
setBorder(new LineBorder(gradientColor1, 1, true));
}
@Override
public Component add(Component comp) {
return contentPanel.add(comp);
}
@Override
public void add(PopupMenu popup) {
contentPanel.add(popup);
}
@Override
public Component add(Component comp, int index) {
return contentPanel.add(comp, index);
}
@Override
public Component add(String name, Component comp) {
return contentPanel.add(name, comp);
}
@Override
public void add(Component comp, Object constraints, int index) {
contentPanel.add(comp, constraints, index);
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
initTitlePanel();
}
public Font getTitleFont() {
return titleFont;
}
public void setTitleFont(Font titleFont) {
this.titleFont = titleFont;
initTitlePanel();
}
public boolean isGradient() {
return gradient;
}
public void setGradient(boolean gradient) {
this.gradient = gradient;
initTitlePanel();
}
public Color getTitleColor() {
return titleColor;
}
public void setTitleColor(Color titleColor) {
this.titleColor = titleColor;
initTitlePanel();
}
public Color getGradientColor1() {
return gradientColor1;
}
public void setGradientColor1(Color gradientColor1) {
this.gradientColor1 = gradientColor1;
initTitlePanel();
}
public Color getGradientColor2() {
return gradientColor2;
}
public void setGradientColor2(Color gradientColor2) {
this.gradientColor2 = gradientColor2;
initTitlePanel();
}
private void init() {
this.titleFont = new Font("SansSerif", Font.BOLD, 20);
this.gradient = true;
this.titleColor = new Color(47, 76, 102);
this.gradientColor1 = new Color(162, 187, 207);
this.gradientColor2 = new Color(199, 202, 208);
this.contentPanel = new JPanel();
this.titleLbl = new JLabel(title);
initTitlePanel();
}
private void init(Font titleFont, Color titleColor, Color gradientColor1,
Color gradientColor2, boolean gradient) {
this.titleFont = titleFont;
this.gradient = gradient;
this.titleColor = titleColor;
this.gradientColor1 = gradientColor1;
this.gradientColor2 = gradientColor2;
this.contentPanel = new JPanel();
this.titleLbl = new JLabel(title);
initTitlePanel();
}
private void initTitlePanel() {
if(gradient) {
titlePanel = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
GradientPaint gp = new GradientPaint(0, 0, gradientColor1,
getWidth(), getHeight(), gradientColor2);
g2d.setPaint(gp);
g2d.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
}
};
titlePanel.setOpaque(false);
} else {
titlePanel = new JPanel();
titlePanel.setBackground(gradientColor1);
titlePanel.setOpaque(true);
}
titlePanel.setLayout(null);
int width = getFontMetrics(titleFont).stringWidth(title);
int height = getFontMetrics(titleFont).getHeight();
titleLbl.setForeground(titleColor);
titleLbl.setFont(titleFont);
titleLbl.setBounds(10, 0, width, height);
titlePanel.setPreferredSize(new Dimension(width, height));
titlePanel.add(titleLbl);
remove(titlePanel);
add(titlePanel, BorderLayout.NORTH);
}
}