1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
public class CheckBoxTitledBorder implements Border, MouseListener, ChangeListener, SwingConstants, Serializable
{
private int offset = 5;
private JCheckBox comp = null;
private JComponent container = null;
private Rectangle rect = null;
private Border border = null;
public CheckBoxTitledBorder(JCheckBox comp, JComponent container, Border border)
{
this.comp = comp;
this.container = container;
this.border = border;
this.container.addMouseListener(this);
this.comp.addChangeListener(this);
}
@Override
public boolean isBorderOpaque()
{
return true;
}
@Override
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();
rect = new Rectangle(offset, 0, size.width, size.height);
SwingUtilities.paintComponent(g, comp, (Container)c, rect);
}
@Override
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()));
}
comp.repaint();
container.repaint();
}
@Override
public void mouseClicked(MouseEvent me)
{
dispatchEvent(me);
}
@Override
public void mouseEntered(MouseEvent me)
{
dispatchEvent(me);
}
@Override
public void mouseExited(MouseEvent me)
{
dispatchEvent(me);
}
@Override
public void mousePressed(MouseEvent me)
{
dispatchEvent(me);
}
@Override
public void mouseReleased(MouseEvent me)
{
dispatchEvent(me);
}
public Border getBorder()
{
return border;
}
public void setBorder(Border border)
{
this.border = border;
}
public Component getComp()
{
return comp;
}
public void setComp(JCheckBox comp)
{
this.comp = comp;
}
public JComponent getContainer()
{
return container;
}
public void setContainer(JComponent container)
{
this.container = container;
this.container.addMouseListener(this);
}
public int getOffset()
{
return offset;
}
public void setOffset(int offset)
{
this.offset = offset;
}
@Override
public void stateChanged(ChangeEvent e)
{
comp.repaint();
container.repaint();
}
} |
Partager