JComboBox返回值

用什么方法返回用户选择的选择?

JPanel ageSelection = new JPanel(); JLabel age = new JLabel("Age:"); ArrayList ageList = new ArrayList(); for (int i = 1; i <= 100; ++i) { ageList.add(i); } DefaultComboBoxModel modelAge = new DefaultComboBoxModel(); for (Integer i : ageList) { modelAge.addElement(i); } JComboBox ageEntries = new JComboBox(); ageEntries.setModel(modelAge); ageEntries.addActionListener(new putInTextListener()); ageSelection.add(age); ageSelection.add(ageEntries); class putInTextListener implements ActionListener { public void actionPerformed (ActionEvent event) { ageEntries.getSelectedItem(); } } 

当添加最后一行( ageEntries.getSelectedItem(); )时,我收到一个错误:

线程“AWT-EventQueue-0”中的exceptionjava.lang.NullPointerException

有任何想法吗?

编辑代码:

 class putInAgeListener implements ItemListener { public void itemStateChanged(ItemEvent e) { Object myAge = ageEntries.getSelectedItem(); String myAgeData = myAge.toString(); int i = Integer.parseInt(myAgeData); System.out.print(i); } } 

1)此语句为空,可能您希望从当前选定的Item获取Integer / Object / String

 Integer / Object / String myWhatever = ageEntries.getSelectedItem(); 

2)更好的是将ItemListener用于JComboBox ,而不是ActionListener ,注意ItemListener触发事件SELECTED/DESELECTED ,总是两次

 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ComboBoxListeners { private JFrame f; private JComboBox flyFromCombo; private JComboBox flyToCombo; private JLabel tripLabel = new JLabel(); private Object[] itemsFrom; private Object[] itemsTo; public ComboBoxListeners() { itemsFrom = new Object[]{"-", "First - From", "Second - From", "Third - From"}; itemsTo = new Object[]{"-", "First - To", "Second - To", "Third - To"}; //flyFromCombo.setPrototypeDisplayValue("################################################"); flyFromCombo = new JComboBox(itemsFrom); flyFromCombo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if ((e.getStateChange() == ItemEvent.SELECTED)) { String str = flyFromCombo.getSelectedItem().toString(); String str1 = flyToCombo.getSelectedItem().toString(); setLabelText(str, str1); } } }); flyToCombo = new JComboBox(itemsTo); flyToCombo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if ((e.getStateChange() == ItemEvent.SELECTED)) { String str = flyFromCombo.getSelectedItem().toString(); String str1 = flyToCombo.getSelectedItem().toString(); setLabelText(str, str1); } } }); tripLabel.setPreferredSize(new Dimension(400, 30)); f = new JFrame("ComboBox ItemListeners"); f.setLayout(new GridLayout(0, 1, 15, 15)); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(flyFromCombo); f.add(flyToCombo); f.add(tripLabel); f.setLocation(150, 150); f.pack(); f.setVisible(true); } private void setLabelText(String str1, String str2) { String textForLabel = ""; String helpStringFirst = str1.trim(); if (helpStringFirst != null && helpStringFirst.length() > 0) { if (!helpStringFirst.equals("-")) { textForLabel = "Flight No57. from : " + helpStringFirst; } else { textForLabel = "Flight from Un-Know : "; } } String helpStringSecond = str2.trim(); if (helpStringSecond != null && helpStringSecond.length() > 0) { if (!helpStringSecond.equals("-")) { textForLabel = textForLabel + " --> to : " + helpStringSecond; } else { textForLabel += " to : Un-Know "; } } final String pushTextForLabel = textForLabel; SwingUtilities.invokeLater(new Runnable() { @Override public void run() { tripLabel.setText(pushTextForLabel); } }); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { ComboBoxListeners comboBoxListeners = new ComboBoxListeners(); } }); } } 

编辑

我没有(也不想要)JDK7,

在此处输入图像描述

 import java.awt.*; import java.awt.event.*; import java.util.ArrayList; import javax.swing.*; public class ComboBoxListeners { private JFrame f; private JComboBox flyFromCombo; private JLabel tripLabel = new JLabel(); public ComboBoxListeners() { ArrayList ageList = new ArrayList(); for (int i = 1; i <= 100; ++i) { ageList.add(i); } DefaultComboBoxModel modelAge = new DefaultComboBoxModel(); for (Integer i : ageList) { modelAge.addElement(i); } flyFromCombo = new JComboBox(modelAge); flyFromCombo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if ((e.getStateChange() == ItemEvent.SELECTED)) { String str = flyFromCombo.getSelectedItem().toString(); tripLabel.setText("Selected Age From JComboBox is : " + str); } } }); tripLabel.setPreferredSize(new Dimension(400, 30)); f = new JFrame("ComboBox ItemListeners"); f.setLayout(new GridLayout(0, 1, 15, 15)); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(flyFromCombo); f.add(tripLabel); f.setLocation(150, 150); f.pack(); f.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { ComboBoxListeners comboBoxListeners = new ComboBoxListeners(); } }); } } 

作为参考,这里是@ mKorbel 示例的变体,它说明了在Java 7中添加到JComboBoxComboBoxModel的通用参数。它还使用Java 7中提供的新推理function,这将在通用实例创建的类型推断中进一步讨论。

 import java.awt.*; import java.awt.event.*; import javax.swing.*; /** @see https://stackoverflow.com/a/9440487/230513 */ public class ComboBoxListener { private JFrame f = new JFrame("ComboBox ItemListener"); private JPanel panel = new JPanel(); private JComboBox combo; private JLabel label = new JLabel("Please select a number from above."); public ComboBoxListener() { DefaultComboBoxModel model = new DefaultComboBoxModel<>(); for (int i = 1; i <= 100; ++i) { model.addElement(i); } combo = new JComboBox<>(model); combo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if ((e.getStateChange() == ItemEvent.SELECTED)) { Integer result = (Integer) combo.getSelectedItem(); label.setText(result.toString()); } } }); f = new JFrame("ComboBox ItemListener"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel.setLayout(new GridLayout(0, 1, 5, 5)); panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); panel.add(combo); panel.add(label); f.add(panel); f.setLocationByPlatform(true); f.pack(); f.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { ComboBoxListener cbl = new ComboBoxListener(); } }); } }