Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何以编程方式关闭消息对话框?_Java_Swing_User Interface_Joptionpane - Fatal编程技术网

Java 如何以编程方式关闭消息对话框?

Java 如何以编程方式关闭消息对话框?,java,swing,user-interface,joptionpane,Java,Swing,User Interface,Joptionpane,我有一个关于joptionpane的问题 使用JOptionPane.showMessageDialog(…),我们可以创建一个消息对话框。但是如何以编程方式关闭它呢?您总是可以通过获取JOptionPane所持有的任何组件的WindowSenior来获取对JOptionPane的引用,然后在返回的窗口上调用dispose()或setVisible(false)。可以使用SwingUtilities.getWindowAn祖(组件) 例如: import java.awt.Window; imp

我有一个关于joptionpane的问题


使用JOptionPane.showMessageDialog(…),我们可以创建一个消息对话框。但是如何以编程方式关闭它呢?

您总是可以通过获取JOptionPane所持有的任何组件的WindowSenior来获取对JOptionPane的引用,然后在返回的窗口上调用
dispose()
setVisible(false)
。可以使用
SwingUtilities.getWindowAn祖(组件)

例如:

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:-)谢谢。但关键是在显示JOptionPane之前调用所有必要的代码。使用嵌入式组件作为挂钩-好主意!