Dies könnte eine sehr einfache Sache sein, die ich übersehe, aber ich kann es einfach nicht herausfinden.JOptionPane.showMessageDialog warte bis OK geklickt wird?
Ich habe die folgende Methode, die eine JTable aktualisiert:
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;
}
}
}
aber ich will nicht isOpenDialog
boolean, bis die OK-Taste auf dem Nachrichtendialog auf false gesetzt werden, gedrückt wird, denn wenn ein Benutzer Drücken Sie die Eingabetaste, wird ein KeyListener
-Ereignis in einem Textfeld aktiviert und löst den gesamten Codeblock erneut aus, wenn er auf false
gesetzt ist.
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();
}
}
}
}
Hat JOptionPane.showMessageDialog()
irgendeine Art von Mechanismus, der die nächste Zeile verhindert die Ausführung, bis die OK-Taste gedrückt wird:
Ein Teil des KeyListener Code ist unten dargestellt? Vielen Dank.
Swing-Operationen (wie einen Dialog zu öffnen) in der EventDispatchThread –
passieren sollte mit Lärm sich einig: Diese Art von Code gehört nicht in einer Swing-Anwendung, da Swing-Übergaberegeln vollständig ignoriert werden. –
Auch ich stimme zu, dass die Swing-Operation im Ereignis-Dispatcher-Thread stattfinden muss, da die main() - Methode in der Swing-Anwendung den Aufbau der GUI im Ereignis-Dispatcher-Thread plant und beendet. Aber Regeln, die in Büchern beschrieben werden, sind für die ideale Welt, und manchmal muss man ein Rebell sein, um die Arbeit zu erledigen. –