Tengo una casilla de verificación que, cuando el usuario la selecciona, debe generar un cuadro de diálogo con más información, y ante la reacción del usuario, haga algo. Mi código es básicamente lo siguiente:JCheckbox cambia de estado dos veces cuando muestro un cuadro de diálogo en statechange, ¿cómo solucionarlo?
private void onItemStateChanged(java.awt.event.ItemEvent evt) {
System.out.println("STATE CHANGED!");//TODO debug code
if (evt.getStateChange() == ItemEvent.SELECTED) {
int returnVal = JOptionPane.showConfirmDialog(this, "blablatext");
if (returnVal == JOptionPane.OK_OPTION) {
this.field1TF.setText("");
this.field1TF.setEditable(false);
this.field2TF.setText("");
this.filed2TF.setEditable(false);
}else if(returnVal == JOptionPane.NO_OPTION){
this.field1TF.setText("");
this.field1TF.setEditable(false);
this.field2TF.setText("");
this.field2TF.setEditable(false);
}
} else if(evt.getStateChange() == ItemEvent.DESELECTED){
this.field1TF.setEditable(true);
this.field2TF.setEditable(true);
}
}
Mi problema ahora es, que mi casilla cambia de estado siempre dos veces cuando hago clic en él. De alguna manera tiene que ver con JOptionPane.showConfirmDialog porque si lo comento, funciona como se esperaba. ¿No conozco algo simple que debería preocuparme aquí, o qué debo hacer para obtener la reacción deseada? (El usuario hace clic casilla -> se hace una pregunta -> elige SI/NO/Cancelar -> programa actúa en consecuencia)
Mientras funciona así (con una variable global para el estado de la casilla de verificación) pensé un controlador para hacer las cosas en itemStateChanged era exactamente lo que necesitaba. ¿Sabes por qué no funciona con eso? Le daré la 'respuesta aceptada' si nadie más viene con una solución al problema original, ya que esta es una solución válida para mí. –
ok, compruebe http://download.oracle.com/javase/tutorial/uiswing/events/itemlistener.html que contiene un exaple con similar outPut y le enviaré un ejemplo sobre ActionListener – mKorbel
No tengo ningún problema para escribir el Listener , Tengo el problema de que el estado de la casilla de verificación cambia dos veces seguidas, lo que de alguna manera debe tener su origen en JOptionpane.showDialog ... Sí, lo hago. Agradezco tu ayuda, y por ahora usé ActionListener, pero la idea de esta publicación era obtener algunas pistas sobre por qué el cuadro de diálogo que engendré provoca que la casilla se vuelva a marcar –