Values of JComboBox

前端 未结 3 1284
[愿得一人]
[愿得一人] 2021-01-20 00:50

Is it possible, to define values different from the actual content in a JComboBox?
In HTML it looks as follows:


                        
    
提交评论

  • 2021-01-20 01:02

    I just answered another question at https://stackoverflow.com/a/10734784/11961 that explains a good way to create a custom ListCellRenderer that replaces toString() on the value class with alternative labels.

    0 讨论(0)
  • 2021-01-20 01:03

    If you create a Customer class and load a list of Customer objects into the combobox then you will get what you want. The combo box will display the toString() of your object, so the Customer class should return the name in toString(). When you retrieve the selected item its a Customer object from which you can get the id or whatever else you want.


    Here is an example to illustrate what I am suggesting. However, it would be a good idea to follow kleopatra's and mKorbel's advice when you get this basic idea working.

    import java.awt.BorderLayout;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    public class ComboJumbo extends JFrame{
    
        JLabel label;
        JComboBox combo;
    
        public static void main(String args[]){
            new ComboJumbo();
        }
    
        public ComboJumbo(){
            super("Combo Jumbo");
            label = new JLabel("Select a Customer");
            add(label, BorderLayout.NORTH);
    
            Customer customers[] = new Customer[6];
            customers[0] = new Customer("Frank", 1);
            customers[1] = new Customer("Sue", 6);
            customers[2] = new Customer("Joe", 2);
            customers[3] = new Customer("Fenton", 3);
            customers[4] = new Customer("Bess", 4);
            customers[5] = new Customer("Nancy", 5);
    
            combo = new JComboBox(customers);
            combo.addItemListener(new ItemListener(){
    
                public void itemStateChanged(ItemEvent e) {
                    Customer c = (Customer)e.getItem();
                    label.setText("You selected customer id: " + c.getId());
                }
    
            });
            JPanel panel = new JPanel();
            panel.add(combo);
            add(panel,BorderLayout.CENTER);
    
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setSize(400, 200);
            setVisible(true);
        }
    
    
        class Customer{
            private String name;
            private int id;
    
            public Customer(String name, int id){
                this.name = name;
                this.id = id;
            }
    
            public String toString(){
                return getName();
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            public int getId() {
                return id;
            }
    
            public void setId(int id) {
                this.id = id;
            }
        }
     }
    
    0 讨论(0)
  • 提交回复
    热议问题