JComboBox returns values

What method is used to return the selection selected by the user?

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

When the last line is added ( ageEntries.getSelectedItem(); ), I get an error message:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

Any ideas?

Edited Code:

 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); } } 
+4
source share
2 answers

1) this operator is empty and you probably want to get the value Integer / Object / String from the currently selected Item

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

2) it is better to use an ItemListener for a JComboBox rather than an ActionListener , pay attention to the ItemListener fired SELECTED/DESELECTED , always twice

 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(); } }); } } 

EDIT

I do not have (and also do not want) JDK7,

enter image description here

 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<Integer> ageList = new ArrayList<Integer>(); 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(); } }); } } 
+5
source

For reference: here is an @mKorbel example that illustrates the common parameters added to JComboBox and ComboBoxModel in Java 7. It also uses the new output function available in Java 7, which is discussed later in Type Inference for Generic Instance Creation .

 import java.awt.*; import java.awt.event.*; import javax.swing.*; /** @see /questions/1398328/jcombobox-returning-values/4360927#4360927 */ public class ComboBoxListener { private JFrame f = new JFrame("ComboBox ItemListener"); private JPanel panel = new JPanel(); private JComboBox<Integer> combo; private JLabel label = new JLabel("Please select a number from above."); public ComboBoxListener() { DefaultComboBoxModel<Integer> 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(); } }); } } 
+3
source

Source: https://habr.com/ru/post/1398328/


All Articles