Как закрыть диалоговое окно сообщения программно?

У меня есть вопрос о joptionpane.

Использование JOptionPane.showMessageDialog(...), мы можем создать диалог сообщения. Но как закрыть его программно?

1 ответов


вы всегда можете получить ссылку на JOptionPane, получив WindowAncestor любого компонента, который он держит, а затем вызовите dispose() или setVisible(false) в окне вернулся. Окно можно получить с помощью 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();
         }
      });
   }
}