あなたが助けてくれることを願っています。
これが単なるバグではなく、解決できることを願っています。
私は現在、JComboBox
. ユーザーがコンボ ボックスで選択した項目を変更すると、ユーザーが変更JOptionPane
を確認できるように が表示されます。
コンボ ボックスで新しい選択が行われると、必要に応じてJOptionPane
が表示されますが、使用するには 2 回クリックする必要があります。つまり、一度クリックしてフォーカスを取得してから、使用するボタンをクリックします。もう 1 つの方法は、プログラムの GUI の境界内 (optionPane の背後) をクリックしてから、ボタンをクリックすることです。
ボタンがクリックされると、例外は発生せず、プログラムは通常どおり機能します。
この機能は、Nimbus
LookAndFeel を使用した場合にのみ発生し、ネイティブ macos laf (Mac でビルドし、Windows ではテストしていません) では発生しませんが、他の理由でニンバスを使用する必要があります。
Nimbusの問題追跡を調べてきましたが、まだ欠陥を見つけていません.
私は同じコード(つまり)を呼び出す JButton を持っていますが、JOptionPane.showConfirmDialog(...
これは完全に機能します。コンボボックスのアクションから呼び出されたときだけです。
あなたが助けてくれることを本当に願っています!事前に乾杯!
import javax.swing.UIManager.*;
import javax.swing.*;
public class TestJavaProblem extends JFrame {
JComboBox jComboBox1;
public TestJavaProblem() {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
initComponents();
}
private void initComponents() {
jComboBox1 = new JComboBox();
//give it some values
jComboBox1.setModel(new DefaultComboBoxModel(new String[] { "1", "2"}));
//add listener
jComboBox1.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) { fireTask(evt);}
});
this.add(jComboBox1);
pack();
}
private void fireTask(java.awt.event.ItemEvent evt) {
if (evt.getStateChange() == 1) { //so dialog fires only once
int i = JOptionPane.showConfirmDialog(jComboBox1, "Message Text", "Title", JOptionPane.OK_CANCEL_OPTION);
System.out.println("Result:" + i);
}
}
public static void main(String args[]) {
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception e) {/*no nimbus*/}
new TestJavaProblem().setVisible(true);
}
}