ItemListener
チェックボックスを選択するときにメッセージボックスを使用すると、チェックボックスが選択されなくなることに気付きました。これは、問題を示す完全な例です。
import javax.swing.*;
import static java.awt.event.ItemEvent.SELECTED;
import static javax.swing.JOptionPane.INFORMATION_MESSAGE;
import static javax.swing.JOptionPane.showMessageDialog;
public class ExampleFrame extends JFrame
{
private ExampleFrame()
{
JCheckBox jCheckBox = new JCheckBox("Fail");
add(jCheckBox);
jCheckBox.addItemListener(itemEvent ->
{
int stateChange = itemEvent.getStateChange();
if (stateChange == SELECTED)
{
showMessageDialog(rootPane,
"The checkbox selection did not work.",
"SSCCE",
INFORMATION_MESSAGE);
}
});
}
public static void main(String[] arguments)
{
ExampleFrame exampleFrame = new ExampleFrame();
exampleFrame.pack();
exampleFrame.setVisible(true);
}
}
このコードを修正してメッセージボックスを表示し、チェックボックスの選択を中断しないようにするためのベストプラクティスは何でしょうか。
追加のスレッドを使用してリスナーを実行し、100
ミリ秒単位で遅延させてから、でメッセージボックスを再度実行することに成功しましたEDT
。しかし、これはハッキーすぎて適切な解決策とは見なされないようです。
この質問は関連していますが、まともな回答は得られませんでした。
モーダルダイアログをで囲む SwingUtilities.invokeLater
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
showMessageDialog(rootPane,
"The checkbox selection did not work.",
"SSCCE",
INFORMATION_MESSAGE);
}
});
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加