Statistics
| Revision:

gvsig-tools / 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 / DropDownLabel.java @ 1887

History | View | Annotate | Download (4.08 KB)

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

    
3
import java.awt.Cursor;
4
import java.awt.Point;
5
import java.awt.event.ActionEvent;
6
import java.awt.event.ActionListener;
7
import java.awt.event.ItemEvent;
8
import java.awt.event.ItemListener;
9
import java.awt.event.MouseAdapter;
10
import java.awt.event.MouseEvent;
11
import java.util.HashSet;
12
import java.util.List;
13
import java.util.Objects;
14
import java.util.Set;
15
import javax.swing.ComboBoxModel;
16
import javax.swing.ImageIcon;
17
import javax.swing.JComponent;
18
import javax.swing.JLabel;
19
import javax.swing.JMenuItem;
20
import javax.swing.JPopupMenu;
21
import org.gvsig.tools.swing.api.DropDown;
22

    
23
/**
24
 *
25
 * @author jjdelcerro
26
 */
27
public class DropDownLabel implements DropDown {
28
    
29
    private final JLabel label;
30
    private final Set<ItemListener> itemListeners;
31
    private ComboBoxModel model;
32
    private int selectedIndex;
33
    private JPopupMenu popup;
34
    private List<ImageIcon>icons;
35

    
36
    public DropDownLabel(final JLabel label) {
37
        this.label = label;
38
        this.itemListeners = new HashSet<>();
39
        this.label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
40
        this.label.addMouseListener(new MouseAdapter() {
41
            @Override
42
            public void mouseClicked(MouseEvent e) {
43
                doShowPopup();
44
            }
45
        });
46
        this.icons=null;
47
    }
48

    
49
    @Override
50
    public JComponent asJComponent() {
51
        return this.label;
52
    }
53

    
54
    @Override
55
    public void setEnabled(boolean enabled) {
56
        this.label.setEnabled(enabled);
57
    }
58

    
59
    private void doShowPopup() {
60
        if (model == null) {
61
            return;
62
        }
63
        this.popup = new JPopupMenu();
64
        for (int i = 0; i < model.getSize(); i++) {
65
            this.popup.add(this.createItem(i));
66
        }
67
        Point p = label.getLocationOnScreen();
68
        popup.show(label, 0, label.getHeight());
69
    }
70

    
71
    @Override
72
    public void setIcons(List<ImageIcon> icons) {
73
        this.icons= icons;
74
    }
75
    
76
    @Override
77
    public List<ImageIcon> getIcons() {
78
        return this.icons;
79
    }
80
    
81
    private ImageIcon getIcon(int index) {
82
        if( this.icons == null || index<0 || index>this.icons.size() ) {
83
            return null;
84
        }
85
        return this.icons.get(index);
86
    }
87
    
88
    private JMenuItem createItem(final int index) {
89
        JMenuItem item = new JMenuItem(Objects.toString(model.getElementAt(index), ""));
90
        item.setIcon(this.getIcon(index));
91
        item.addActionListener(new ActionListener() {
92
            @Override
93
            public void actionPerformed(ActionEvent e) {
94
                setSelectedIndex(index);
95
                ItemEvent ie = new ItemEvent(DropDownLabel.this, 1, index, ItemEvent.SELECTED);
96
                for (ItemListener itemListener : itemListeners) {
97
                    if (itemListener != null) {
98
                        itemListener.itemStateChanged(ie);
99
                    }
100
                }
101
            }
102
        });
103
        return item;
104
    }
105

    
106
    @Override
107
    public void setModel(ComboBoxModel model) {
108
        this.model = model;
109
    }
110

    
111
    @Override
112
    public ComboBoxModel getModel() {
113
        return this.model;
114
    }
115

    
116
    @Override
117
    public void setSelectedIndex(int i) {
118
        if( model == null ) {
119
            return;
120
        }
121
        String value = Objects.toString(this.model.getElementAt(i), "");
122
        this.label.setText(value);
123
        this.label.setToolTipText(value);
124
        this.selectedIndex = i;
125
    }
126

    
127
    @Override
128
    public Object getSelectedItem() {
129
        if( model == null ) {
130
            return null;
131
        }
132
        return this.model.getElementAt(selectedIndex);
133
    }
134

    
135
    @Override
136
    public int getSelectedIndex() {
137
        return this.selectedIndex;
138
    }
139

    
140
    @Override
141
    public Object[] getSelectedObjects() {
142
        if( model == null ) {
143
            return null;
144
        }
145
        return new Object[]{this.getSelectedItem()};
146
    }
147

    
148
    @Override
149
    public void addItemListener(ItemListener itemListener) {
150
        this.itemListeners.add(itemListener);
151
    }
152

    
153
    @Override
154
    public void removeItemListener(ItemListener l) {
155
        this.itemListeners.remove(l);
156
    }
157
    
158
}