JOptionPane schließen, ohne auf das Kreuz zu klicken?

Hallo Zusammen,

wie kann ich ein JOptionPane schließen, ohne auf das Kreuz zu klicken?
JOptionPane.getRootFrame().dispose(); funktioniert nicht :/

Java:
	public static void main(String[] args) {
		JOptionPane.showOptionDialog(null, "text", "Empty?",
				JOptionPane.DEFAULT_OPTION, JOptionPane.NO_OPTION, null,
				new Object[] {}, null);

		JOptionPane.getRootFrame().dispose();
	}

Vielen Dank,
Angelika
 

Fabio Hellmann

Erfahrenes Mitglied
Hi,
wie darf man deine Frage verstehen?
Der Dialog schließt sich durch klicken auf: einen Button (OK, Cancel, Nein, Ja, etc.) oder durch das X. Den int-Wert der zurückgegeben wird, ist der Return-Wert mit dem du abfragen kannst, was geklickt wurde (außer es wurde auf das X geklickt).

Gruß

Fabio
 
Hallo Fabio,

Wenn der Anwender innerhalb meiner Anwendung etwas abspeichert, möchte ich ein Dialog-Fenster ohne ein Button mit dem Hinweis "Ihre Daten wurden gespeichert" anzeigen lassen.
Nach einer Sekunde sollte das Fenster automatisch wieder geschlossen werden, ohne das der Anwender erst auf das X klicken muss. Ein Ok-Button nach jedem Speichervorganf wäre auch sehr störend.

Kurz gesagt:
1. Anwender klickt auf 'Speichern'
2. Ein Popup-Fenster mit dem Hinweis taucht auf und verschwindet automatisch nach 1 Sekunde.

Die methode zum Warten liegt mir vor. Mein Problem ist, dass ich nicht weiss, wie ich Fesnter nach der Sekunde automatisch wieder schließen kann!

Schöne Grüße,
Angelika
 

Fabio Hellmann

Erfahrenes Mitglied
Dann wirst du wahrscheinlich über die Klasse JDialog gehen müssen. Dir deinen eigenen "Popup"-Dialog bauen müssen und diese Funktion implementieren.

Hier ein Beispiel, wie ich es lösen würde.
Java:
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;

/**
 * @author FabioH
 */
public class JPopupDialog extends JDialog implements Runnable
{
	private final long displaytime;

	private JPopupDialog(JFrame owner, String title, String msg, long displaytime, boolean modal) {
		super(owner, title, modal);
		this.displaytime = displaytime;
		setContentPane(new JLabel(msg, JLabel.CENTER));
		setLocationRelativeTo(owner);
		pack();
		setVisible(true);
		Thread t = new Thread(this, "Popup-Closer");
		t.start();
	}

	@Override
	public void run() {
		try {
			Thread.sleep(displaytime);
			dispose();
		} catch(InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	public static void create(JFrame owner, String title, String msg, long displaytime, boolean modal) {
		new JPopupDialog(owner, title, msg, displaytime, modal);
	}
	
	public static void main(String[] args) {
		JPopupDialog.create(null, "Test", "Testnachricht", 1000, false);
	}
}

Gruß

Fabio
 

Neue Beiträge