Ich habe eine Frage zu Joptionspane.Wie man Nachrichtendialog programmatisch schließt?
Mit JOptionPane.showMessageDialog (...) können wir einen Nachrichtendialog erstellen. Aber wie man es programmatisch schließt?
Ich habe eine Frage zu Joptionspane.Wie man Nachrichtendialog programmatisch schließt?
Mit JOptionPane.showMessageDialog (...) können wir einen Nachrichtendialog erstellen. Aber wie man es programmatisch schließt?
Sie können immer einen Verweis auf den JOptionPane erhalten, indem Sie den WindowAncestor einer Komponente abrufen, die er enthält, und dann dispose()
oder setVisible(false)
im zurückgegebenen Window aufrufen. Das Fenster kann mit SwingUtilities.getWindowAncestor(component)
Zum Beispiel erhalten:
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class CloseOptionPane {
@SuppressWarnings("serial")
private static void createAndShowGui() {
final JLabel label = new JLabel();
int timerDelay = 1000;
new Timer(timerDelay , new ActionListener() {
int timeLeft = 5;
@Override
public void actionPerformed(ActionEvent e) {
if (timeLeft > 0) {
label.setText("Closing in " + timeLeft + " seconds");
timeLeft--;
} else {
((Timer)e.getSource()).stop();
Window win = SwingUtilities.getWindowAncestor(label);
win.setVisible(false);
}
}
}){{setInitialDelay(0);}}.start();
JOptionPane.showMessageDialog(null, label);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
Nichts mehr als perfekt .... –
jemand Marken von diesem abziehen, LOL, ich glaube nicht +1 für diesen schön gemachtes Beispiel :-) –
Danke. Der Schlüssel ist jedoch Aufruf aller notwendigen Code vor dem JOptionPane angezeigt wird. –