En una aplicación Swing, tengo una serie de subpaneles, cada uno escuchando un solo JSlider
. El panel principal circundante también escucha todos los subpaneles. Para obtener resultados consistentes en el siguiente ejemplo, tuve que agregar primero el padre y , luego el oyente local. Esto tiene sentido, dado el orden prescrito en EventListenerList
y se explica en este article. ¿Puedo confiar en ese pedido o debo hacer arreglos para enviar un evento diferente?Orden de activación EventListenerList
class SubPanel extends JPanel implements ChangeListener {
private final JSlider slider = new JSlider();
private final JLabel label = new JLabel();
private final String name;
private float value;
public SubPanel(String name, float value, ChangeListener parent) {
this.name = name;
this.value = value;
...
slider.addChangeListener(parent);
slider.addChangeListener(this);
}
...
}
Adición: la discusión en EventListenerList
parece ser un consejo aplicación en lugar de una garantía. El enfoque de encadenamiento sugerido por pstanton impone el orden correcto de manera más confiable. Por ejemplo, SubPanel
's ChangeListener
puede simplemente reenviar el evento al padre.
@Override
public void stateChanged(ChangeEvent e) {
...
parent.stateChanged(e);
}
¡Interesante pregunta y discusión! 1+ –
La aplicación ['Converter'] (http://docs.oracle.com/javase/tutorial/uiswing/components/panel.html) incluye un ejemplo en' ConverterRangeModel'. – trashgod
Acabo de recibir su publicación mientras 'googleando ', quería explicar en detalle. por favor haga que la publicación cuente, y ¡indíqueme si algo de lo que he descrito puede ser incorrecto! – Sage