2015-06-22 3 views
0

Я хочу закрыть JOptionPane после того, как прошло некоторое время, я пробовал с dispose(), hide() и с помощью команды getRootPane().dispose() без каких-либо результатов.Как я могу закрыть JOptionPane автоматически?

Я хочу закрыть его через 3 секунды или более, чтобы пользователь не нажал кнопку в любое время, когда появится JOptionPane.

ответ

0

Вы можете использовать одно из этих операторов, чтобы скрыть/закрыть JFrame.

Frame.setVisible(false); 

или

jFrame.dispose(); 

т.е.

public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.setContentPane(new JOptionPane()); 
     frame.setVisible(true); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     try { 
      Thread.sleep(5000); //sleep 5 seconds 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     frame.setVisible(false); 
    } 
+0

Я думаю, что ключом к вопросу является 'JOptionPane'. Кроме того, вы, например, нарушаете правила единственного потока Swing, изменяя интерфейс пользователя вне контекста EDT. Если вы попробовали это из контекста «ActionListener», например, это не сработало бы, как ожидалось – MadProgrammer

-1

Вы можете перебираем активных окон, создающих этот метод класса, который вы хотите сделать это:

private Timer createTimerClose(int seconds) { 
    ActionListener close = new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      Window[] windows = Window.getWindows(); 
      for (Window window : windows) { 
       if (window instanceof JDialog) { 
        JDialog dialog = (JDialog) window; 
        if (dialog.getContentPane().getComponentCount() == 1 
         && dialog.getContentPane().getComponent(0) instanceof JOptionPane){ 
         dialog.dispose(); 
        } 
       } 
      } 

     } 

    }; 
    Timer t = new Timer(seconds * 1000, close); 
    t.setRepeats(false); 
    return t; 
} 

И после этого вы вызываете метод ateTimerClose (secondsyouwanttoclose) .start(); перед вызовом вашей JOptionPane.

Смежные вопросы