import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.border.Border;
/*
* Created on 02.10.2009
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class Probier
{
public void buildGuiWithoutCOmponentTitledBorder()
{
JFrame frame = new JFrame();
Dimension dim = frame.getToolkit().getScreenSize();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation((dim.width - frame.getWidth()) / 2, (dim.height - frame.getHeight()) / 2);
frame.setTitle("Without");
JPanel mMainPanel = (JPanel) frame.getContentPane();
JPanel border1 = new JPanel();
JList list = new JList();
DefaultListModel lmodel = new DefaultListModel();
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setLayoutOrientation(JList.VERTICAL);
for (int i = 0; i < 100; i++)
lmodel.addElement(i);
list.setModel(lmodel);
//set Layouts
border1.setLayout(new BorderLayout());
//build panels
border1.setBorder(BorderFactory.createTitledBorder("border1"));
border1.add(new JLabel("border1_south"), BorderLayout.SOUTH);
border1.add(new JScrollPane(list), BorderLayout.CENTER);
mMainPanel.add(border1, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
public void buildGuiWithCOmponentTitledBorder()
{
JFrame frame = new JFrame();
Dimension dim = frame.getToolkit().getScreenSize();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation((dim.width - frame.getWidth()) / 2, (dim.height - frame.getHeight()) / 2);
frame.setTitle("With");
JPanel mMainPanel = (JPanel) frame.getContentPane();
JPanel border1 = new JPanel();
JList list = new JList();
DefaultListModel lmodel = new DefaultListModel();
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setLayoutOrientation(JList.VERTICAL);
for (int i = 0; i < 100; i++)
lmodel.addElement(i);
list.setModel(lmodel);
//set Layouts
border1.setLayout(new BorderLayout());
//build panels
border1.setBorder(new ComponentTitledBorder(new JCheckBox(), border1, BorderFactory.createTitledBorder("border1"),
ComponentTitledBorder.RIGHT));
border1.add(new JLabel("border1_south"), BorderLayout.SOUTH);
border1.add(new JScrollPane(list), BorderLayout.CENTER);
mMainPanel.add(border1, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
/**
* @param args
*/
public static void main(String[] args)
{
Probier p = new Probier();
p.buildGuiWithCOmponentTitledBorder();
p.buildGuiWithoutCOmponentTitledBorder();
}
public class ComponentTitledBorder implements Border, MouseListener, SwingConstants
{
int offset = 5;
int justification = -1;
public static final int LEFT = 0;
public static final int RIGHT = 1;
Component comp;
JComponent container;
Rectangle rect;
Border border;
public ComponentTitledBorder(Component comp, JComponent container, Border border, int justification)
{
this.comp = comp;
this.container = container;
this.border = border;
this.justification = justification;
container.addMouseListener(this);
}
public ComponentTitledBorder(Component comp, JComponent container, Border border)
{
this.comp = comp;
this.container = container;
this.border = border;
container.addMouseListener(this);
}
public boolean isBorderOpaque()
{
return true;
}
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height)
{
Insets borderInsets = border.getBorderInsets(c);
Insets insets = getBorderInsets(c);
int temp = (insets.top - borderInsets.top) / 2;
border.paintBorder(c, g, x, y + temp, width, height - temp);
Dimension size = comp.getPreferredSize();
//right alligned
if (justification > 0)
offset = width - 5 - size.width;
rect = new Rectangle(offset, 0, size.width, size.height);
SwingUtilities.paintComponent(g, comp, (Container) c, rect);
}
public Insets getBorderInsets(Component c)
{
Dimension size = comp.getPreferredSize();
Insets insets = border.getBorderInsets(c);
insets.top = Math.max(insets.top, size.height);
return insets;
}
private void dispatchEvent(MouseEvent me)
{
if (rect != null && rect.contains(me.getX(), me.getY()))
{
Point pt = me.getPoint();
pt.translate(-offset, 0);
comp.setBounds(rect);
comp.dispatchEvent(new MouseEvent(comp, me.getID(), me.getWhen(), me.getModifiers(), pt.x, pt.y, me
.getClickCount(), me.isPopupTrigger(), me.getButton()));
if (!comp.isValid())
{
container.repaint();
}
}
}
public void mouseClicked(MouseEvent me)
{
dispatchEvent(me);
}
public void mouseEntered(MouseEvent me)
{
dispatchEvent(me);
}
public void mouseExited(MouseEvent me)
{
dispatchEvent(me);
}
public void mousePressed(MouseEvent me)
{
dispatchEvent(me);
}
public void mouseReleased(MouseEvent me)
{
dispatchEvent(me);
}
}
}