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

У меня вопрос о 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();
         }
      });
   }
}