Revision 12180 trunk/libraries/libUIComponent/src/org/gvsig/gui/beans/slidertext/SliderTextContainer.java
SliderTextContainer.java | ||
---|---|---|
22 | 22 |
import java.awt.Dimension; |
23 | 23 |
import java.awt.GridBagConstraints; |
24 | 24 |
import java.awt.GridBagLayout; |
25 |
import java.awt.event.FocusEvent; |
|
26 |
import java.awt.event.FocusListener; |
|
27 |
import java.awt.event.KeyEvent; |
|
25 | 28 |
import java.awt.event.KeyListener; |
29 |
import java.awt.event.MouseEvent; |
|
30 |
import java.awt.event.MouseListener; |
|
31 |
import java.awt.event.MouseMotionListener; |
|
32 |
import java.awt.event.MouseWheelListener; |
|
33 |
import java.util.ArrayList; |
|
34 |
import java.util.Iterator; |
|
26 | 35 |
|
27 | 36 |
import javax.swing.JPanel; |
28 | 37 |
import javax.swing.JSlider; |
29 | 38 |
import javax.swing.JTextField; |
39 |
import javax.swing.event.ChangeEvent; |
|
30 | 40 |
import javax.swing.event.ChangeListener; |
31 | 41 |
|
32 |
import org.gvsig.gui.beans.slidertext.listeners.SliderTextListener; |
|
42 |
import org.gvsig.gui.beans.slidertext.listeners.SliderEvent; |
|
43 |
import org.gvsig.gui.beans.slidertext.listeners.SliderListener; |
|
33 | 44 |
/** |
34 | 45 |
* Barra de deslizamiento con una ventana de texto que tiene el valor de la |
35 | 46 |
* posici?n de la barra. En este control podr? controlarse mediante la entrada |
... | ... | |
37 | 48 |
* |
38 | 49 |
* Nacho Brodin (nachobrodin@gmail.com) |
39 | 50 |
*/ |
40 |
public class SliderTextContainer extends JPanel { |
|
41 |
private static final long serialVersionUID = 1876415954410511634L; |
|
42 |
private JPanel pText = null; |
|
43 |
private JSlider slider = null; |
|
44 |
private JTextField text = null; |
|
45 |
private int min = 0; |
|
46 |
private int max = 255; |
|
47 |
private double interval = 1.0; |
|
48 |
private int defaultPos = 0; |
|
49 |
protected SliderTextListener listener = null; |
|
50 |
private boolean decimal = false; |
|
51 |
public class SliderTextContainer extends JPanel implements ChangeListener, FocusListener, KeyListener, MouseListener { |
|
52 |
private static final long serialVersionUID = 1876415954410511634L; |
|
53 |
private JPanel pText = null; |
|
54 |
private JSlider slider = null; |
|
55 |
private JTextField text = null; |
|
56 |
private int min = 0; |
|
57 |
private int max = 255; |
|
58 |
private double interval = 1.0; |
|
59 |
private int defaultPos = 0; |
|
60 |
private boolean decimal = false; |
|
61 |
private ArrayList actionCommandListeners = new ArrayList(); |
|
62 |
private boolean disconnectEvent = false; |
|
63 |
private boolean dragged = false; |
|
51 | 64 |
|
52 | 65 |
/** |
53 | 66 |
* Contructor |
67 |
* |
|
54 | 68 |
* @param min Valor m?nimo de la barra |
55 | 69 |
* @param max Valor m?ximo de la barra |
56 |
* @param defaultPos Posici?n por defecto
|
|
70 |
* @param defaultPos Posici?n por defecto |
|
57 | 71 |
*/ |
58 | 72 |
public SliderTextContainer(int min, int max, int defaultPos) { |
59 | 73 |
super(); |
... | ... | |
72 | 86 |
} |
73 | 87 |
|
74 | 88 |
/** |
75 |
* A?ade un ChangeListener al panel. El m?todo stateChanged del listener registrado |
|
76 |
* ser? ejecutado cuando se accione el slider. |
|
77 |
* @param l |
|
89 |
* Dispara el evento del cambio del control |
|
78 | 90 |
*/ |
79 |
public void addChangeListener(ChangeListener l) { |
|
80 |
listener.changeListenerList.add(l); |
|
91 |
protected void callChangeValue() { |
|
92 |
Iterator acIterator = actionCommandListeners.iterator(); |
|
93 |
while (acIterator.hasNext()) { |
|
94 |
SliderListener listener = (SliderListener) acIterator.next(); |
|
95 |
listener.actionValueChanged(new SliderEvent(this)); |
|
96 |
} |
|
81 | 97 |
} |
82 | 98 |
|
83 | 99 |
/** |
84 |
* A?ade un ChangeListener al panel. El m?todo stateChanged del listener registrado |
|
85 |
* ser? ejecutado cuando se accione el slider. |
|
86 |
* @param l |
|
100 |
* Dispara el evento del cambio del control |
|
87 | 101 |
*/ |
88 |
public void addKeyListener(KeyListener l) { |
|
89 |
listener.keyListenerList.add(l); |
|
102 |
protected void callDraggedValue() { |
|
103 |
Iterator acIterator = actionCommandListeners.iterator(); |
|
104 |
while (acIterator.hasNext()) { |
|
105 |
SliderListener listener = (SliderListener) acIterator.next(); |
|
106 |
listener.actionValueDragged(new SliderEvent(this)); |
|
107 |
} |
|
90 | 108 |
} |
91 | 109 |
|
92 | 110 |
/** |
111 |
* A?adir un listener a la lista de eventos |
|
112 |
* @param listener |
|
113 |
*/ |
|
114 |
public void addValueChangedListener(SliderListener listener) { |
|
115 |
if (!actionCommandListeners.contains(listener)) |
|
116 |
actionCommandListeners.add(listener); |
|
117 |
} |
|
118 |
|
|
119 |
/** |
|
120 |
* Borrar un listener de la lista de eventos |
|
121 |
* @param listener |
|
122 |
*/ |
|
123 |
public void removeValueChangedListener(SliderListener listener) { |
|
124 |
actionCommandListeners.remove(listener); |
|
125 |
} |
|
126 |
|
|
127 |
/** |
|
93 | 128 |
* Asigna un borde al componente con el texto pasado como |
94 | 129 |
* par?metro |
95 | 130 |
* @param name |
... | ... | |
103 | 138 |
* |
104 | 139 |
*/ |
105 | 140 |
private void initialize() { |
106 |
listener = new SliderTextListener(this); |
|
107 | 141 |
this.setLayout(new BorderLayout()); |
108 | 142 |
this.add(getSlider(), BorderLayout.CENTER); |
109 | 143 |
this.add(getPText(), BorderLayout.EAST); |
... | ... | |
138 | 172 |
slider.setMaximum((int) ((max - min) / interval)); |
139 | 173 |
slider.setValue((int) ((defaultPos - min) / interval)); |
140 | 174 |
updateTicks(); |
141 |
slider.addChangeListener(listener); |
|
175 |
slider.addChangeListener(this); |
|
176 |
slider.addMouseListener(this); |
|
142 | 177 |
} |
143 | 178 |
return slider; |
144 | 179 |
} |
... | ... | |
154 | 189 |
text.setText(defaultPos + ""); |
155 | 190 |
text.setPreferredSize(new Dimension(40, 26)); |
156 | 191 |
text.setMinimumSize(new Dimension(40, 26)); |
157 |
text.addFocusListener(listener);
|
|
158 |
text.addKeyListener(listener);
|
|
192 |
text.addFocusListener(this);
|
|
193 |
text.addKeyListener(this);
|
|
159 | 194 |
} |
160 | 195 |
return text; |
161 | 196 |
} |
... | ... | |
309 | 344 |
public double getInterval() { |
310 | 345 |
return interval; |
311 | 346 |
} |
312 |
} |
|
347 |
|
|
348 |
/** |
|
349 |
* Controla que si el formato introducido en el textfield es numerico. Si lo |
|
350 |
* es se actualiza la posici?n del slider |
|
351 |
*/ |
|
352 |
private void checkDecimalTextAndUpdateSlider() { |
|
353 |
String text = getTextField().getText(); |
|
354 |
double value = 0; |
|
355 |
disconnectEvent = true; |
|
356 |
|
|
357 |
try { |
|
358 |
if (!text.equals("")) { |
|
359 |
value = (Double.parseDouble(text) * 100) / (double) (getMax() - getMin()); |
|
360 |
value = Double.valueOf(text).doubleValue(); |
|
361 |
if (value < getMin()) |
|
362 |
value = getMin(); |
|
363 |
if (value > getMax()) |
|
364 |
value = getMax(); |
|
365 |
} |
|
366 |
setValue(value); |
|
367 |
callChangeValue(); |
|
368 |
} catch (NumberFormatException exc) { |
|
369 |
setValue(getSlider().getValue()*interval + min); |
|
370 |
} |
|
371 |
} |
|
372 |
|
|
373 |
/** |
|
374 |
* Control del evento de cambio en la posici?n del slider. Este cambio |
|
375 |
* actualiza el valor de la caja de texto y ejecuta el m?todo stateChanged de |
|
376 |
* los listener registrados. |
|
377 |
*/ |
|
378 |
public void stateChanged(ChangeEvent e) { |
|
379 |
//Modificamos la caja de texto con el valor de la posici?n del slider |
|
380 |
if (!disconnectEvent) { |
|
381 |
double value = (getSlider().getValue() * getInterval()) + getMin(); |
|
382 |
if (!getDecimal()) |
|
383 |
getTextField().setText(((int) value) + ""); |
|
384 |
else |
|
385 |
getTextField().setText(((int) (value * 10)) / 10.0 + ""); |
|
386 |
if (dragged) |
|
387 |
callDraggedValue(); |
|
388 |
else |
|
389 |
callChangeValue(); |
|
390 |
} |
|
391 |
disconnectEvent = false; |
|
392 |
} |
|
393 |
|
|
394 |
/* |
|
395 |
* (non-Javadoc) |
|
396 |
* @see java.awt.event.FocusListener#focusLost(java.awt.event.FocusEvent) |
|
397 |
*/ |
|
398 |
public void focusLost(FocusEvent e) { |
|
399 |
checkDecimalTextAndUpdateSlider(); |
|
400 |
} |
|
401 |
|
|
402 |
/* |
|
403 |
* (non-Javadoc) |
|
404 |
* @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent) |
|
405 |
*/ |
|
406 |
public void keyReleased(KeyEvent e) { |
|
407 |
if (e.getKeyCode() == 10) |
|
408 |
checkDecimalTextAndUpdateSlider(); |
|
409 |
} |
|
410 |
|
|
411 |
/* |
|
412 |
* (non-Javadoc) |
|
413 |
* @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent) |
|
414 |
*/ |
|
415 |
public void mousePressed(MouseEvent e) { |
|
416 |
dragged = true; |
|
417 |
} |
|
418 |
|
|
419 |
/* |
|
420 |
* (non-Javadoc) |
|
421 |
* @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent) |
|
422 |
*/ |
|
423 |
public void mouseReleased(MouseEvent e) { |
|
424 |
dragged = false; |
|
425 |
callChangeValue(); |
|
426 |
} |
|
427 |
|
|
428 |
public void focusGained(FocusEvent e) {} |
|
429 |
public void keyPressed(KeyEvent e) {} |
|
430 |
public void keyTyped(KeyEvent e) {} |
|
431 |
public void mouseClicked(MouseEvent e) {} |
|
432 |
public void mouseEntered(MouseEvent e) {} |
|
433 |
public void mouseExited(MouseEvent e) {} |
|
434 |
|
|
435 |
/** |
|
436 |
* @deprecated Usar addValueChangedListener() en su lugar |
|
437 |
*/ |
|
438 |
public synchronized void addFocusListener(FocusListener l) { |
|
439 |
super.addFocusListener(l); |
|
440 |
} |
|
441 |
|
|
442 |
/** |
|
443 |
* @deprecated Usar addValueChangedListener() en su lugar |
|
444 |
*/ |
|
445 |
public synchronized void addKeyListener(KeyListener l) { |
|
446 |
super.addKeyListener(l); |
|
447 |
} |
|
448 |
|
|
449 |
/** |
|
450 |
* @deprecated Usar addValueChangedListener() en su lugar |
|
451 |
*/ |
|
452 |
public synchronized void addMouseListener(MouseListener l) { |
|
453 |
super.addMouseListener(l); |
|
454 |
} |
|
455 |
|
|
456 |
/** |
|
457 |
* @deprecated Usar addValueChangedListener() en su lugar |
|
458 |
*/ |
|
459 |
public synchronized void addMouseMotionListener(MouseMotionListener l) { |
|
460 |
super.addMouseMotionListener(l); |
|
461 |
} |
|
462 |
|
|
463 |
/** |
|
464 |
* @deprecated Usar addValueChangedListener() en su lugar |
|
465 |
*/ |
|
466 |
public synchronized void addMouseWheelListener(MouseWheelListener l) { |
|
467 |
super.addMouseWheelListener(l); |
|
468 |
} |
|
469 |
} |
Also available in: Unified diff