Java: Swing JComboBox, is it possible to have hidden data for each item in a list?

JComponents can get hidden data using setName() and getName() , right? What about JComboBox items? (I mean the elements in the JComboBox, not the JComboBox itself)

What if I have a JComboBox and inside it I have a list of usernames (for example), now I want to have something like "id" for each username in the list in accordance with the order of their order, which is a better way to do this is?

+7
source share
3 answers
 import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.plaf.basic.*; public class ComboBoxItem extends JFrame implements ActionListener { public ComboBoxItem() { Vector model = new Vector(); model.addElement( new Item(1, "car" ) ); model.addElement( new Item(2, "plane" ) ); model.addElement( new Item(3, "train" ) ); model.addElement( new Item(4, "boat" ) ); model.addElement( new Item(5, "boat aadf asfsdf a asd asd" ) ); JComboBox comboBox; // Easiest approach is to just override toString() method // of the Item class comboBox = new JComboBox( model ); comboBox.addActionListener( this ); comboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE); getContentPane().add(comboBox, BorderLayout.NORTH ); // Most flexible approach is to create a custom render // to diplay the Item data comboBox = new JComboBox( model ); comboBox.setRenderer( new ItemRenderer() ); comboBox.addActionListener( this ); getContentPane().add(comboBox, BorderLayout.SOUTH ); } public void actionPerformed(ActionEvent e) { JComboBox comboBox = (JComboBox)e.getSource(); Item item = (Item)comboBox.getSelectedItem(); System.out.println( item.getId() + " : " + item.getDescription() ); } class ItemRenderer extends BasicComboBoxRenderer { public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); if (value != null) { Item item = (Item)value; setText( item.getDescription().toUpperCase() ); } if (index == -1) { Item item = (Item)value; setText( "" + item.getId() ); } return this; } } class Item { private int id; private String description; public Item(int id, String description) { this.id = id; this.description = description; } public int getId() { return id; } public String getDescription() { return description; } public String toString() { return description; } } public static void main(String[] args) { JFrame frame = new ComboBoxItem(); frame.setDefaultCloseOperation( EXIT_ON_CLOSE ); frame.pack(); frame.setVisible( true ); } } 
+13
source

Your object:

 public class Item { private int id; private String name; public Item(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString(){ return this.name; } } 

Add items to JComboBox:

 JComboBox combo; combo.addItem(new Item(1, "Test")); combo.addItem(new Item(15,"Test 2")); 

And get the item:

 Item selected_item = (Item) combo.getSelectedItem(); System.out.println(selected_item.getId()); System.out.println(selected_item.getName()); 
+4
source

Create a User class that has the username and id attributes; return only username to .toString() .

+3
source

All Articles