小弟用swing的jlist编程来实现一个列表展示项目
现在发现只能放name或者放ID,任意一个作为显示
能不能实现显示name,但是当我getselectvalue的时候取到的就是显示项的ID呢
谢谢

解决方案 »

  1.   

    用一個hashmap  把你的數據 放進去   根據選擇的jlist的選項  到hashmap里面去取相對應的值  就可以了 name  --  ID
      

  2.   

    感谢楼上的,这种方法效果是实现了
    但需要在haspmap重新查询一次,当haspmap数据多的时候会不会速度慢,这个我没测试,还不知道
    我主要是想实现.net的那种list的功能,点list的项就可以取到对应的ID,一次性就完成,不用查询第2次
      

  3.   

    前几天写了一次,Copy过来,希望对你有帮助package test;import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.util.ArrayList;
    import java.util.List;import javax.swing.DefaultListModel;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.JTextArea;
    import javax.swing.ListCellRenderer;public class Test extends JFrame{
        private JList list;
        private DefaultListModel model;
        private JTextArea area;
        
        public Test(){
            //生成List,使用自定义CellRenderer
            model =  new DefaultListModel();
            list = new JList(model);
            list.setCellRenderer(new PersonListCell());
            for(Person p:initData()){
                model.addElement(p);
            }
            //TextArea显示数据
            area = new JTextArea();
            //布局
            this.add(list,BorderLayout.WEST);
            this.add(area,BorderLayout.CENTER);
            this.setSize(400,300);
            this.setVisible(true);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //事件监听
            list.addMouseListener(new MouseAdapter() {
                public void mouseClicked(MouseEvent e) {
                    int index = list.locationToIndex(e.getPoint());
                    Person p = (Person)model.getElementAt(index);
                    //鼠标双击
                    if (e.getClickCount() == 2) {
                        area.setText("编号:"+p.getId()+"\t姓名:"+p.getName()+"\t年龄:"+p.getAge());
                    }
                }
            });
        }
        /**
         * 模拟从数据库读取数据,并封装成Person的集合
         * @return
         */
        private List<Person> initData(){
            List<Person> list = new ArrayList<Person>();
            for(int i=0;i<10;i++){
                list.add(new Person("Tom"+i,i,i+1000L));
            }
            return list;
        }
        /**
         * main
         * @param args
         */
        public static void main(String[] args) {
            new Test();
        }
    }
    /**
     * 自定义CellRenderer,指定List加入的元素为Person类型
     * @author Declan
     *
     */
    class PersonListCell extends JLabel implements ListCellRenderer{
        public Component getListCellRendererComponent(JList list, Object value,
                int index, boolean sel, boolean foc) {
            Person p = (Person) value; 
            //设置List上显示的是Person的name属性
            setText(p.getName());
            if (sel) {
                setBackground(list.getSelectionBackground());
                setForeground(list.getSelectionForeground());
            } else {
                setBackground(list.getBackground());
                setForeground(list.getForeground());
            }
            setEnabled(list.isEnabled());
            setFont(list.getFont());
            setOpaque(true);
            return this;
        }
    }
    /**
     * 封装Person对象
     * @author Declan
     *
     */
    class Person {
        private String name;
        private int age;
        private Long id;
        public Person() {
            super();
        }
        
        public Person(String name, int age, Long id) {
            super();
            this.name = name;
            this.age = age;
            this.id = id;
        }    public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        
    }
      

  4.   

    jlist里的元素是可以放object的呀,所以,你只要写个简单的bean,包含id,name属性,然后重载toString()方法,把name返回,然后在getselected的时候把id拿出来就可以了,如class Item{
       private String id;
       private String name;   .....   public String toString(){
           return getName();
       }
    }然后Item item = (Item) list.getSelected...;
    item.getId();
      

  5.   

    感谢4楼的,我后来也是你这样做的...重写了toString()方法
    3楼朋友的也可以,效果看起更好些
    谢谢,问题已经解决了,今天来论坛才发现3,4楼朋友的方法
    呵呵