| 12
 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