2012-03-25 13 views

risposta

21

È sempre possibile ottenere un riferimento a JOptionPane ottenendo il WindowAncestor di qualsiasi componente in suo possesso, quindi chiamare dispose() o setVisible(false) nella finestra restituita. La finestra può essere ottenuto utilizzando SwingUtilities.getWindowAncestor(component)

Ad esempio:

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

Niente di più che perfetto .... –

+1

Qualcuno può dedurre segni da questa, LOL, io non la penso così +1 per questo esempio ben realizzato :-) –

+1

Grazie. La chiave però chiama tutto il codice necessario prima che venga mostrato JOptionPane. –

Problemi correlati