fix checkbox togging with mouse (do not access checkbox.getX() as these components are not layouted and the return value is unreliable)

This commit is contained in:
Sergey Simonchik
2015-12-21 19:58:40 +03:00
parent 1cda975b17
commit 58d2b47f56
@@ -42,7 +42,8 @@ public class CheckBoxList<T> extends JBList {
super();
//noinspection unchecked
setModel(dataModel);
setCellRenderer(new CellRenderer());
final CellRenderer cellRenderer = new CellRenderer();
setCellRenderer(cellRenderer);
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
setBorder(BorderFactory.createEtchedBorder());
addKeyListener(new KeyAdapter() {
@@ -75,7 +76,8 @@ public class CheckBoxList<T> extends JBList {
catch (ClassCastException c) {
iconArea = DEFAULT_CHECK_BOX_WIDTH;
}
if (e.getX() < iconArea + checkbox.getX()) {
int checkboxX = e.getX() - cellRenderer.getLeftBorderThickness();
if (checkboxX >= 0 && checkboxX < iconArea) {
setSelected(checkbox, index);
return true;
}
@@ -180,11 +182,13 @@ public class CheckBoxList<T> extends JBList {
private class CellRenderer implements ListCellRenderer {
private final Border mySelectedBorder;
private final Border myBorder;
private final int myLeftBorderThickness;
private CellRenderer() {
mySelectedBorder = UIManager.getBorder("List.focusCellHighlightBorder");
final Insets borderInsets = mySelectedBorder.getBorderInsets(new JCheckBox());
myBorder = new EmptyBorder(borderInsets);
myLeftBorderThickness = borderInsets.left;
}
@Override
@@ -239,6 +243,10 @@ public class CheckBoxList<T> extends JBList {
return rootComponent;
}
private int getLeftBorderThickness() {
return myLeftBorderThickness;
}
}
@Nullable