Revision 2420

View differences:

org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.swing/org.gvsig.tools.swing.api/src/main/java/org/gvsig/tools/swing/api/DefaultCheckListCellRenderer.java
1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.tools.swing.api;
7

  
8
import java.awt.BorderLayout;
9
import java.awt.Component;
10
import javax.swing.JCheckBox;
11
import javax.swing.JList;
12
import javax.swing.JPanel;
13
import javax.swing.ListCellRenderer;
14
import javax.swing.ListSelectionModel;
15

  
16
/**
17
 *
18
 * @author fdiaz
19
 */
20
public class DefaultCheckListCellRenderer extends JPanel implements ListCellRenderer {
21
    
22
    private final ListCellRenderer delegate;
23
    private ListSelectionModel selectionModel;
24
    private final JCheckBox checkBox = new JCheckBox();
25
    private int checkBoxWidth = 0;
26

  
27
    public DefaultCheckListCellRenderer(ListCellRenderer renderer, ListSelectionModel selectionModel) {
28
        this.delegate = renderer;
29
        this.selectionModel = selectionModel;
30
        this.setLayout(new BorderLayout());
31
        this.setOpaque(false);
32
        this.checkBox.setOpaque(false);
33
        checkBoxWidth = (int) this.checkBox.getPreferredSize().getWidth();
34
    }
35

  
36
    @Override
37
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
38
        Component renderer = delegate.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
39
        checkBox.setSelected(selectionModel.isSelectedIndex(index));
40
        removeAll();
41
        add(checkBox, BorderLayout.WEST);
42
        add(renderer, BorderLayout.CENTER);
43
        return this;
44
    }
45

  
46
    public void setCheckedModel(ListSelectionModel selectionModel) {
47
        this.selectionModel = selectionModel;
48
    }
49

  
50
    public int getCheckBoxWidth() {
51
        return checkBoxWidth;
52
    }
53
    
54
}
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.swing/org.gvsig.tools.swing.impl/src/main/java/org/gvsig/tools/swing/impl/DefaultJListWithCheckbox.java
1 1

  
2 2
package org.gvsig.tools.swing.impl;
3 3

  
4
import java.awt.BorderLayout;
5 4
import java.awt.Color;
6
import java.awt.Component;
7 5
import java.awt.Dimension;
8 6
import java.awt.Point;
9 7
import java.awt.Rectangle;
......
17 15
import java.util.Vector;
18 16
import javax.accessibility.AccessibleContext;
19 17
import javax.swing.DefaultListSelectionModel;
20
import javax.swing.JCheckBox;
21 18
import javax.swing.JList;
22
import javax.swing.JPanel;
23 19
import javax.swing.ListCellRenderer;
24 20
import javax.swing.ListModel;
25 21
import javax.swing.ListSelectionModel;
......
27 23
import javax.swing.event.ListSelectionListener;
28 24
import javax.swing.plaf.ListUI;
29 25
import javax.swing.text.Position;
26
import org.gvsig.tools.swing.api.DefaultCheckListCellRenderer;
30 27
import org.gvsig.tools.swing.api.JListWithCheckbox;
31 28
import org.slf4j.Logger;
32 29
import org.slf4j.LoggerFactory;
......
36 33
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultJListWithCheckbox.class);
37 34

  
38 35

  
39
    private class CheckListCellRenderer extends JPanel implements ListCellRenderer {
40 36

  
41
        private final ListCellRenderer delegate;
42
        private ListSelectionModel selectionModel;
43
        private final JCheckBox checkBox = new JCheckBox();
44

  
45
        public CheckListCellRenderer(ListCellRenderer renderer, ListSelectionModel selectionModel) {
46
            this.delegate = renderer;
47
            this.selectionModel = selectionModel;
48
            this.setLayout(new BorderLayout());
49
            this.setOpaque(false);
50
            this.checkBox.setOpaque(false);
51
            checkBoxWidth = (int) this.checkBox.getPreferredSize().getWidth();
52
        }
53

  
54
        @Override
55
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
56
            Component renderer = delegate.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
57
            checkBox.setSelected(selectionModel.isSelectedIndex(index));
58
            removeAll();
59
            add(checkBox, BorderLayout.WEST);
60
            add(renderer, BorderLayout.CENTER);
61
            return this;
62
        }
63
        
64
        public void setCheckedModel(ListSelectionModel selectionModel) {
65
            this.selectionModel = selectionModel;
66
        }
67
    }
68

  
69
    private int checkBoxWidth = 0;
70 37
    private final JList wrappedList;
71 38
    private ListSelectionModel checkedsModel = new DefaultListSelectionModel();
72 39
    private Set<ListSelectionListener> checkedsListeners;
73 40
    private final ListSelectionListener checksModelListener;
74
    private final CheckListCellRenderer checkListCellRenderer;
41
    private final DefaultCheckListCellRenderer checkListCellRenderer;
75 42
        
76 43
    public DefaultJListWithCheckbox(final JList wrappedList) {
77 44
        this.wrappedList = wrappedList;
78 45
        this.checkedsModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
79 46
        this.checkedsListeners = new HashSet<>();
80 47
        
81
        this.checkListCellRenderer = new CheckListCellRenderer(
48
        this.checkListCellRenderer = new DefaultCheckListCellRenderer(
82 49
                this.wrappedList.getCellRenderer(),
83 50
                this.checkedsModel
84 51
        );
......
90 57
                if (index < 0) {
91 58
                    return;
92 59
                }
60
                ListCellRenderer renderer = wrappedList.getCellRenderer();
61
                int checkBoxWidth = 16;
62
                if(renderer instanceof DefaultCheckListCellRenderer){
63
                    checkBoxWidth = ((DefaultCheckListCellRenderer)renderer).getCheckBoxWidth();
64
                }
93 65
                if (me.getX() > wrappedList.getCellBounds(index, index).getX() + checkBoxWidth) {
94 66
                    return;
95 67
                }

Also available in: Unified diff