2012-03-25 15 views

Odpowiedz

21

Zawsze można uzyskać odniesienie do JOptionPane, pobierając WindowAncestor z dowolnego komponentu, który trzyma, a następnie zadzwonić pod numer dispose() lub setVisible(false) w oknie zwróconym. Okno można uzyskać stosując SwingUtilities.getWindowAncestor(component)

na przykład:

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

Nic więcej niż idealny .... –

+1

ktoś może odliczyć znaki z tym jednym, LOL, nie sądzę więc +1 do tego ładnie wykonany przykład :-) –

+1

Dzięki. Kluczem jest jednak wywołanie całego niezbędnego kodu przed wyświetleniem JOptionPane. –

Powiązane problemy