2016-10-28 11 views
0

なぜ私のプログラムはをItemStateChangedイベントで2回呼び出すのですか?JCheckBox:ItemStateChangedイベントで2回showMessageDialog

System.out.printlnのみを使用すると、プログラムが正しく動作します。

+0

はたぶん、このコードにアクセスする複数のスレッドがあります – shinzou

+0

私は新しいJFrameフォームを作成しているし、何か他のものがある – TMD

答えて

1

JOptionPaneが表示される前にチェックボックスの状態が更新されていません。

SwingUtilities.invokeLater(...)を使用してJOptionペインを表示する前に、状態が更新され再描画されていることを確認してください。 JOptionPaneのを表示するには:。。それは私がする@@理解することは非常に困難ですので

checkBox.addItemListener(new ItemListener() 
{ 
    public void itemStateChanged(java.awt.event.ItemEvent evt) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       if(evt.getStateChange() == ItemEvent.SELECTED) 
       { 
        JOptionPane.showMessageDialog(null, "Check box 1 selected"); 
       } 
       else 
       { 
        JOptionPane.showMessageDialog(null, "Check box 1 deselected"); 
       } 
      } 
     }); 
    } 
}); 
+0

私はbeginerていますあなたのアドバイスで問題を解決しようとする前に、SwingUtilities.invokeLater(...)スレッドに関する詳細を学んでください。ありがとう、ありがとうございます。 – TMD

+0

@tmd、 'SwingUtilについてもっと学びます。 ities.invokeLater(...)、 ' - [Concurrency](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html)のSwingチュートリアルのセクションを読んでからもっと理解してください'Event Dispatch Thread'についてです。 – camickr

+0

ありがとうございます。しかし、あなたの答えが正しいことを保証していないので、私はあなたの答えを受け入れることができません。しかし、誰かがあなたの答えを正しく確認したら、私はそれをします。 – TMD

関連する問題