Java - Methode pausieren bis ein JButton geklickt wurde?
Hey,
ich habe eine Java-Methode, die ein SQL-Query zusammenbaut, welches einen neuen Eintrag in einer Datenbank schreibt.
Noch bevor alle der Methode übergebenen Parameter für die Abfrage zusammengebaut werden, rufe ich eine andere Methode der gleichen Klasse auf, welche mit einem SELECT-Statement überprüft, ob an dem Datum, welches übergeben wird, schon ein Eintrag existiert.
Wenn ja, wird ein JDialog-Fenster geöffnet, welches eine Warnung ausgibt, dass bereits ein Eintrag existiert und fragt, ob der User diesen überschreiben will. Dieses Fenster gibt nun die Möglichkeit auf einen Button "Überschreiben" und "Abbrechen" zu klicken.
Leider geht meine ursprüngliche Methode (die die Abfrage zusammenbaut) direkt nach dem Erstellen des JDialog-Objekts weiter und baut die Abfrage sowieso zusammen, ohne zu warten auf was ich überhaupt geklickt habe.
Kann mir da jemand weiterhelfen, wie ich in der Methode pausieren kann, bis ein Button-Klick im JDialog-Fenster erfolgt ist?
1 Antwort
Achte darauf, dass dein Dialog modal ist. Dann werden auch andere Aktionen blockiert, so lange der Dialog geöffnet ist.
Entweder du nutzt dafür die entsprechende Konstruktorüberladung oder die setModal-Methode.
Beispiel:
public class ConfirmDialog extends JDialog {
private boolean result;
public ConfirmDialog(JFrame parent) {
super(parent, "Confirm", true);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
JButton confirmButton = new JButton("OK");
confirmButton.addActionListener(event -> {
result = true;
dispose();
});
add(confirmButton);
pack();
}
public boolean showDialog() {
result = false;
setVisible(true);
return result;
}
}
// main:
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Example");
frame.setLayout(new GridLayout(2, 1));
JLabel label = new JLabel("false");
frame.add(label);
JButton button = new JButton("Open");
button.addActionListener(event -> {
ConfirmDialog dialog = new ConfirmDialog(frame);
boolean confirmed = dialog.showDialog();
label.setText(Boolean.toString(confirmed));
});
frame.add(button);
frame.pack();
frame.setVisible(true);
});