2016-07-08 7 views
3

私は一度に3つのMessageDialogボックスを表示するプログラムを作ろうとしています。私はあなたがswing timeractionListnerクラスにJOPtionPane.showMessageDialogを入れると、毎秒新しいMessageDialogボックスを表示すると思っていました。一度に複数のMessageDialogを表示

package pracatice; 

import java.awt.event.*; 

import javax.swing.*; 

public class practice extends JFrame 
{ 
    public static int num = 0; 
    public static TimerClass tc = new TimerClass(); 
    public static Timer timer = new Timer(1000, tc); 
    public JPanel panel = new JPanel(); 
    public JButton btn = new JButton("press"); 

    public practice() 
    { 
     setSize(100,100); 
     setTitle("Test"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setPanel(); 
     setVisible(true); 
    } 
    public void setPanel() 
    { 
     btn.addActionListener(new listener()); 
     panel.add(btn); 

     add(panel); 
    } 

    public class listener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      num = 0; 
      System.out.println("starting timer"); 
      timer.start(); 
     } 
    } 

     public static class TimerClass implements ActionListener 
     { 
     public void actionPerformed(ActionEvent e) 
     { 
      System.out.println("Adding 1 to num"); 
      num++; 
      JOptionPane.showMessageDialog(null,"Test"); 
      if(num == 3) 
      { 
       System.out.println("stopping the timer"); 
       timer.stop(); 
      } 
     } 
} 

public static void main(String[] args) 
{ 
    practice p = new practice(); 
    System.out.println("created an instance of practice"); 
} 

}

それは動作しますが、ではない、私はそれがしたい方法:だからここ

は私が思いついたコードです。 1秒ごとに新しいボックスを表示するのではなく、1秒後に新しいボックスを表示します。

「press」を押すと、1秒間待機してボックスを生成します。 「OK」を押すと、1秒間待って別のものを起動します。どのようにして3つのボックスを1つずつ作成させるか考えてみましょうか?

+2

理由について_one_ダイアログのない複数のメッセージ、[実施例](http://stackoverflow.com/a/3002830/230513) 。 – trashgod

答えて

3

JOptionPaneのshowXメソッドを使用する場合は、ドキュメントに記載されているモーダル(ブロッキングと1つずつ)のダイアログを作成しています。 JOptionPaneは、showXメソッドを使用する代わりに手動で作成することで直接使用できます。

手動で新しいものを作成し、モーダルにならないように設定:

optionPane = new JOptionPane(...); 
dialog = optionPane.createDialog(null, "the title"); 
dialog.setModal(false); 
dialog.show(); 
+0

ありがとうございます。 –

1

ダイアログを作成するメソッド(JOptionPane.show ...)は、ユーザーが何らかの形でダイアログを閉じるまで返されません。 Swingがシングルスレッドの場合、これが発生するまで、他のSwingプロセスは実行できません。一度に3つのダイアログを開く場合は、non-modalダイアログを使用してください。

関連する問題