なぜ私のプログラムはをItemStateChanged
イベントで2回呼び出すのですか?JCheckBox:ItemStateChangedイベントで2回showMessageDialog
System.out.println
のみを使用すると、プログラムが正しく動作します。
なぜ私のプログラムはをItemStateChanged
イベントで2回呼び出すのですか?JCheckBox:ItemStateChangedイベントで2回showMessageDialog
System.out.println
のみを使用すると、プログラムが正しく動作します。
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");
}
}
});
}
});
私はbeginerていますあなたのアドバイスで問題を解決しようとする前に、SwingUtilities.invokeLater(...)スレッドに関する詳細を学んでください。ありがとう、ありがとうございます。 – TMD
@tmd、 'SwingUtilについてもっと学びます。 ities.invokeLater(...)、 ' - [Concurrency](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html)のSwingチュートリアルのセクションを読んでからもっと理解してください'Event Dispatch Thread'についてです。 – camickr
ありがとうございます。しかし、あなたの答えが正しいことを保証していないので、私はあなたの答えを受け入れることができません。しかし、誰かがあなたの答えを正しく確認したら、私はそれをします。 – TMD
はたぶん、このコードにアクセスする複数のスレッドがあります – shinzou
私は新しいJFrameフォームを作成しているし、何か他のものがある – TMD