我注意到ItemListener在選擇復(fù)選框時使用消息框時,它會阻止復(fù)選框被選中。這是一個完整的示例,演示了該問題: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); }}修復(fù)此代碼以使其顯示消息框并且不會中斷選擇復(fù)選框的最佳做法是什么?我成功地使用了一個額外的線程來執(zhí)行監(jiān)聽器,將它延遲例如100毫秒,然后在EDT. 不過,這似乎太難了,不能被認(rèn)為是一個合適的解決方案。
1 回答

肥皂起泡泡
TA貢獻(xiàn)1829條經(jīng)驗 獲得超6個贊
用你的模態(tài)對話框包圍 SwingUtilities.invokeLater
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
showMessageDialog(rootPane,
"The checkbox selection did not work.",
"SSCCE",
INFORMATION_MESSAGE);
}
});
添加回答
舉報
0/150
提交
取消