2012-03-25 15 views

Antwort

21

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(); 
     } 
     }); 
    } 
} 
+1

Nichts mehr als perfekt .... –

+1

jemand Marken von diesem abziehen, LOL, ich glaube nicht +1 für diesen schön gemachtes Beispiel :-) –

+1

Danke. Der Schlüssel ist jedoch Aufruf aller notwendigen Code vor dem JOptionPane angezeigt wird. –

Verwandte Themen