Esto podría ser algo muy simple que estoy pasando por alto, pero parece que no puedo resolverlo.JOptionPane.showMessageDialog ¿esperar hasta que se haga clic en Aceptar?
Tengo el siguiente método que actualiza un JTable:
class TableModel extends AbstractTableModel {
public void updateTable() {
try {
// update table here
...
} catch (NullPointerException npe) {
isOpenDialog = true;
JOptionPane.showMessageDialog(null, "No active shares found on this IP!");
isOpenDialog = false;
}
}
}
Sin embargo, no quiero isOpenDialog
booleano que se establece en false hasta que el botón OK en el diálogo de mensaje se presiona, porque si un usuario al presionar Enter se activará un evento KeyListener
en un campo de texto y se activará ese bloque completo de código si está configurado en false
.
parte del código KeyListener se muestra a continuación:
public class KeyReleased implements KeyListener {
...
@Override
public void keyReleased(KeyEvent ke) {
if(txtIPField.getText().matches(IPADDRESS_PATTERN)) {
validIP = true;
} else {
validIP = false;
}
if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
if (validIP && !isOpenDialog) {
updateTable();
}
}
}
}
¿Se JOptionPane.showMessageDialog()
tienen algún tipo de mecanismo que impide la ejecución de la línea siguiente hasta que se pulse el botón OK? Gracias.
operaciones Swing (como la apertura de un cuadro de diálogo) debe suceder en el EventDispatchThread –
acuerdo con el ruido: Este tipo de código no pertenecen en una aplicación Swing ya que ignora por completo las reglas de enhebrado Swing. –
Incluso estoy de acuerdo en que la operación de Swing debe ocurrir en Event Dispatcher Thread, como método main() en la aplicación swing programa la construcción de la GUI en el Event Dispatcher Thread y se cierra. pero las reglas descritas en los libros son para el mundo ideal, y algunas veces uno debe ser un rebelde para realizar el trabajo. –