1 package com
.intellij
.ui
;
4 import javax
.swing
.border
.Border
;
5 import javax
.swing
.border
.EmptyBorder
;
6 import javax
.swing
.plaf
.basic
.BasicRadioButtonUI
;
8 import java
.awt
.event
.*;
13 public class CheckBoxList
extends JList
{
14 private static final Border noFocusBorder
= new EmptyBorder(1, 1, 1, 1);
15 private static final int DEFAULT_CHECK_BOX_WIDTH
= 20;
17 public CheckBoxList(final ListModel dataModel
, final CheckBoxListListener checkBoxListListener
) {
19 setCellRenderer(new CellRenderer());
20 setSelectionMode(ListSelectionModel
.SINGLE_SELECTION
);
21 setBorder(BorderFactory
.createEtchedBorder());
22 addKeyListener(new KeyAdapter() {
24 public void keyTyped(KeyEvent e
) {
25 if (e
.getKeyChar() == ' ') {
26 int index
= CheckBoxList
.this.getSelectedIndex();
29 JCheckBox checkbox
= (JCheckBox
)getModel().getElementAt(index
);
30 setSelected(checkbox
, index
, checkBoxListListener
);
35 addMouseListener(new MouseAdapter() {
36 public void mouseClicked(MouseEvent e
) {
38 int index
= locationToIndex(e
.getPoint());
41 JCheckBox checkbox
= (JCheckBox
)getModel().getElementAt(index
);
44 iconArea
= ((BasicRadioButtonUI
)checkbox
.getUI()).getDefaultIcon().getIconWidth();
46 catch (ClassCastException c
) {
47 iconArea
= DEFAULT_CHECK_BOX_WIDTH
;
49 if (e
.getX() < iconArea
) {
50 setSelected(checkbox
, index
, checkBoxListListener
);
58 private void setSelected(JCheckBox checkbox
, int index
, CheckBoxListListener checkBoxListListener
) {
59 boolean value
= !checkbox
.isSelected();
60 checkbox
.setSelected(value
);
62 checkBoxListListener
.checkBoxSelectionChanged(index
, value
);
65 private class CellRenderer
implements ListCellRenderer
{
66 public Component
getListCellRendererComponent(JList list
, Object value
, int index
, boolean isSelected
, boolean cellHasFocus
) {
67 JCheckBox checkbox
= (JCheckBox
)value
;
68 checkbox
.setBackground(getBackgound(isSelected
, checkbox
));
69 checkbox
.setForeground(getForeGround(isSelected
, checkbox
));
70 checkbox
.setEnabled(isEnabled());
71 checkbox
.setFont(getFont(checkbox
));
72 checkbox
.setFocusPainted(false);
73 checkbox
.setBorderPainted(true);
74 checkbox
.setBorder(isSelected ? UIManager
.getBorder("List.focusCellHighlightBorder") : noFocusBorder
);
79 protected Font
getFont(final JCheckBox checkbox
) {
83 protected Color
getBackgound(final boolean isSelected
, final JCheckBox checkbox
) {
84 return isSelected ?
getSelectionBackground() : getBackground();
87 protected Color
getForeGround(final boolean isSelected
, final JCheckBox checkbox
) {
88 return isSelected ?
getSelectionForeground() : getForeground();