2011-05-27 20 views

Respuesta

3

Puede conectar una sola instancia de ChangeListener a todos sus controles, lo que podría parecer como (cuando una clase interna):

private class ListenerImpl implements ChangeListener { 
    public void stateChanged(ChangeEvent e) { save(); } 
} 

añadir este oyente de una sola vez puede recorrer a través de los hijos de su Container la siguiente manera:

final ListenerImpl l = new ListenerImpl(); 
for (Component c : getComponents()) { 
    if (c instanceof JSpinner) { 
     ((JSpinner)c).addChangeListener(l); 
    } else if (c instanceof JTextPane) { } // ... other types of components 
} 

que tienen que buscar los diferentes tipos de componentes porque no hay una interfaz que define el método de addChangeListener(..) (que yo sepa).

+0

@David usted obtuvo su respuesta aquí – RMT

+0

Bueno, pero ¿hay alguna manera de hacerlo en una para cada bucle para ir a través de todos los textifleds y spinners en lugar de agregar cada uno manualmente? Tengo alrededor de 15 de cada uno y el código va a ser muy largo si lo hago. – David

+0

@ David edité en consecuencia – Waldheinz

2

Yo sugeriría que se agrega una ChangeListener o una FocusListener a cada uno de los controles en el formulario y llame Save() en uno de los métodos de rellamada. (En realidad, probablemente me vaya para el FocusListener y llamar a Save() del focusLost -method.)

+0

¿Hay alguna manera de utilizar un para cada ciclo para pasar por cada girador en el formulario? (Así que puedo agregar un oyente de enfoque a cada uno en el bucle en lugar de hacerlo manualmente). – David

+0

para (Componente c: getComponents()) if (c instancia de Spinner) {((Spinner) c) .addChangeListener (oyente);} –

+1

Sí, esto es posible (aunque no estoy seguro si es la "mejor práctica"). Puede recorrer los componentes utilizando ['Container.getComponents()'] (http://download.oracle.com/javase/6/docs/api/java/awt/Container.html#getComponents%28%29) . Algo como esto: 'for (Component comp: form.getComponents()) if (comp instanceof JSpinner) comp.addFocusListener (yourListener);' (o 'addChangeListener()' si lo prefiere. – aioobe

Cuestiones relacionadas