Revision 12180 trunk/libraries/libUIComponent/src/org/gvsig/gui/beans/slidertext/SliderTextContainer.java

View differences:

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