Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libUIComponent / src / org / gvsig / gui / beans / slidertext / SliderTextContainer.java @ 10741

History | View | Annotate | Download (6.8 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 */
19
package org.gvsig.gui.beans.slidertext;
20

    
21
import java.awt.BorderLayout;
22
import java.awt.Dimension;
23
import java.awt.GridBagConstraints;
24
import java.awt.GridBagLayout;
25
import java.awt.event.KeyListener;
26
import java.awt.event.MouseListener;
27

    
28
import javax.swing.JPanel;
29
import javax.swing.JSlider;
30
import javax.swing.JTextField;
31
import javax.swing.event.ChangeListener;
32

    
33
import org.gvsig.gui.beans.BaseComponent;
34
import org.gvsig.gui.beans.slidertext.listeners.SliderTextListener;
35

    
36
/**
37
 * Barra de deslizamiento con una ventana de texto que tiene el valor de la posici?n de
38
 * la barra. En este control podr? controlarse mediante la entrada de datos por la caja de
39
 * texto la posibilidad de introducir valores decimales.
40
 *  
41
 * Nacho Brodin (nachobrodin@gmail.com)
42
 */
43
public class SliderTextContainer extends BaseComponent{
44

    
45
        private JPanel pText = null;
46
        private JSlider slider = null;
47
        private JTextField text = null;
48
        private int min = 0;
49
        private int max = 255;
50
        private int defaultPos = 0;
51
        private SliderTextListener listener = null;
52
        private boolean decimal = false;
53
        
54
        /**
55
         * Contructor
56
         * @param min Valor m?nimo de la barra
57
         * @param max Valor m?ximo de la barra
58
         * @param defaultPos Posici?n por defecto 
59
         */
60
        public SliderTextContainer(int min, int max, int defaultPos) {
61
                super();
62
                this.min = min;
63
                this.max = max;
64
                this.defaultPos = defaultPos;
65
        
66
                initialize();
67
        }
68

    
69
        /**
70
         * A?ade un ChangeListener al panel. El m?todo stateChanged del listener registrado
71
         * ser? ejecutado cuando se accione el slider.
72
         * @param l
73
         */
74
        public void addChangeListener(ChangeListener l){
75
                listener.changeListenerList.add(l);
76
        }
77
        
78
        /**
79
         * A?ade un MouseListener al panel.
80
         * @param l
81
         */
82
        public void addMouseListener(MouseListener l){
83
                listener.mouseListenerList.add(l);
84
        }
85
        
86
        /**
87
         * A?ade un ChangeListener al panel. El m?todo stateChanged del listener registrado
88
         * ser? ejecutado cuando se accione el slider.
89
         * @param l
90
         */
91
        public void addKeyListener(KeyListener l){
92
                listener.keyListenerList.add(l);
93
        }
94
        
95
        /**
96
         * Asigna un borde al componente con el texto pasado como
97
         * par?metro
98
         * @param name
99
         */
100
        public void setBorder(String name){
101
                setBorder(javax.swing.BorderFactory.createTitledBorder(null, name, javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
102
        }
103
        
104
        /**
105
         * This method initializes this
106
         * 
107
         */
108
        private void initialize() {
109
                listener = new SliderTextListener(this);
110
        this.setLayout(new BorderLayout());
111
        this.add(getSlider(), BorderLayout.CENTER);
112
        this.add(getPText(), BorderLayout.EAST);
113
        this.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.gray,1));
114
       // setComponentSize(width, height);
115
        }
116

    
117
        /**
118
         * This method initializes jPanel1        
119
         *         
120
         * @return javax.swing.JPanel        
121
         */
122
        private JPanel getPText() {
123
                if (pText == null) {
124
                        pText = new JPanel();
125
                        GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
126
                        gridBagConstraints1.insets = new java.awt.Insets(0, 10, 8, 0);
127
                        pText.setLayout(new GridBagLayout());
128
                        pText.add(getTextField(), gridBagConstraints1);
129
                }
130
                return pText;
131
        }
132

    
133
        /**
134
         * This method initializes jSlider        
135
         *         
136
         * @return javax.swing.JSlider        
137
         */
138
        public JSlider getSlider() {
139
                if (slider == null) {
140
                        slider = new JSlider();
141
                        slider.setMajorTickSpacing(50);
142
                        slider.setPaintTicks(true);
143
                        slider.setMinorTickSpacing(10);
144
                        slider.setMinimum(min);
145
                        slider.setMaximum(max);
146
                        slider.setValue(defaultPos);
147
                        slider.addChangeListener(listener);
148
                        slider.addMouseListener(listener);
149
                }
150
                return slider;
151
        }
152

    
153
        /**
154
         * This method initializes jTextField        
155
         *         
156
         * @return javax.swing.JTextField        
157
         */
158
        public JTextField getTextField() {
159
                if (text == null) {
160
                        text = new JTextField();
161
                        text.setText(defaultPos + "");
162
                        text.setPreferredSize(new Dimension(40, 26));
163
                        text.addFocusListener(listener);
164
                        text.addKeyListener(listener);
165
                }
166
                return text;
167
        }
168
        
169
        public void setComponentSize(int w, int h){
170
        }
171
        
172
        /**
173
         * Obtiene el valor del control.
174
         * @return Valor del control en formato double.
175
         */
176
        public double getValue(){
177
                return Double.valueOf(getTextField().getText()).doubleValue();
178
        }
179

    
180
        /**
181
         * Asigna el valor del control.
182
         * @return Valor del control en formato double.
183
         */
184
        public void setValue(double value){
185
                if(decimal)
186
                        getTextField().setText(String.valueOf(value));
187
                else
188
                        getTextField().setText(String.valueOf((int)value));
189
                getSlider().setValue((int)value);
190
        }
191
                
192
        /**
193
         * Activa o desactiva el control del panel
194
         * @param active
195
         */
196
        public void setControlEnabled(boolean active){
197
                slider.setEnabled(active);
198
                getTextField().setEnabled(active);
199
                if(active == false){
200
                        getTextField().setBackground(pText.getBackground());
201
                }else{
202
                        getTextField().setBackground(java.awt.Color.white);
203
                }        
204
        }
205
        
206
        /**
207
         * Asigna el flag que dice si el valor del campo de texto ser? 
208
         * decimal o entero
209
         * @param dec true si se admiten valores decimales y false si no se admiten
210
         */
211
        public void setDecimal (boolean dec){
212
                decimal = dec;
213
                String s = getTextField().getText();
214
                if(dec)
215
                        getTextField().setText((s +".0"));
216
                else{
217
                        int index = s.lastIndexOf(".");
218
                        if(index == -1 || index == 0)
219
                                index = s.length() - 1;
220
                        getTextField().setText(s.substring(0, index + 1));
221
                }
222
        }
223
        
224
        /**
225
         * Obtiene el flag que dice si el valor del campo de texto es 
226
         * decimal o entero
227
         * @return true si se admiten valores decimales y false si no se admiten
228
         */
229
        public boolean getDecimal (){
230
                return decimal;
231
        }
232

    
233
        /**
234
         * Obtiene el valor m?ximo del slider
235
         * @return Entero con el valor m?ximo
236
         */
237
        public int getMax() {
238
                return max;
239
        }
240
        
241
        /**
242
         * Asigna el valor m?ximo del slider
243
         * @param Entero con el valor m?ximo
244
         */
245
        public void setMax(int max) {
246
                this.max = max;
247
        }
248

    
249
        /**
250
         * Obtiene el valor m?nimo del slider
251
         * @return Entero con el valor m?nimo
252
         */
253
        public int getMin() {
254
                return min;
255
        }
256

    
257
        /**
258
         * Asigna el valor m?nimo del slider
259
         * @param Entero con el valor m?nimo
260
         */
261
        public void setMin(int min) {
262
                this.min = min;
263
        }
264
}