2012-03-25 15 views

答えて

21

保持しているコンポーネントのWindowAncestorを取得し、Window上でdispose()またはsetVisible(false)を呼び出して、いつでもJOptionPaneへの参照を取得できます。ウィンドウは、例えばSwingUtilities.getWindowAncestor(component)

を使用することによって得ることができない。完璧よりも

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

何も.... –

+1

誰かがLOL、この1からマークを差し引くことができ、私はこのための1を考えていませんうまく細工された例:-) –

+1

ありがとう。ただし、JOptionPaneが表示される前に、必要なコードをすべて呼び出してください。 –

関連する問題