надеюсь, что вы можете помочь.
Я надеюсь, что это не просто ошибка, и мы можем ее исправить.
В настоящее время у меня есть программа на Java с JComboBox
. Когда пользователь изменяет выбранный элемент в поле со списком, появляется JOptionPane
, чтобы позволить пользователю подтвердить изменение.
Когда новый выбор сделан в поле со списком, JOptionPane
появляется по желанию, но вы должны дважды щелкнуть по нему, чтобы использовать его. То есть, нажмите его один раз, чтобы получить фокус, а затем нажмите кнопку, которую вы хотите использовать. Другой способ - щелкнуть в пределах графического интерфейса программы (за панелью параметров), а затем нажать кнопку.
Никаких исключений не происходит, и программа работает как обычно после нажатия кнопок.
Эта функция доступна только при использовании Nimbus
LookAndFeel, а не с родным macos laf (сборка на Mac, не тестировалась на Windows), но мне нужно использовать nimbus по другим причинам.
Я просматривал отслеживание проблем 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);
}
}