The following variation works correctly on Ubuntu 12, OpenJDK 6. The only significant change was starting on the event dispatch thread.
Why this difference from java 1.5 and java 1.6 in linux.
Java Swing has always required correct synchronization. Migrating to successive versions sometimes exposes a latent error.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JComboBoxDemo extends JPanel {
public JComboBoxDemo() {
String[] comboTypes = {"Numbers", "Alphabets", "Symbols"};
JComboBox comboTypesList = new JComboBox(comboTypes);
comboTypesList.setSelectedIndex(2);
comboTypesList.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JComboBox jcmbType = (JComboBox) e.getSource();
String cmbType = (String) jcmbType.getSelectedItem();
System.out.println(cmbType);
}
});
setLayout(new BorderLayout());
add(comboTypesList, BorderLayout.NORTH);
setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
}
public static void main(String s[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("JComboBox Usage Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new JComboBoxDemo());
frame.pack();
frame.setVisible(true);
}
});
}
}