Java:Swing JComboBox,是否可以为列表中的每个项目提供隐藏数据?

JComponents可以使用setName()getName()获取隐藏数据,对吗? JComboBox项目怎么样? (我指的是JComboBox中的项目 ,而不是JComboBox本身)

如果我有一个JComboBox,并且在其中我有一个用户名列表(例如),现在我希望根据订单的方式为列表中的每个用户名设置’id’,这是最好的方法这个?

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

你的对象:

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

将项添加到JComboBox:

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

得到物品:

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

创建一个具有usernameid属性的User类; 仅返回.toString() username