如果JComboBox1中有"张三","李四","张三"
JComboBox2中有"18","23","25"
选择JComboBox1中的第一个张三,则JComboBox2中显示为18,反之亦然
如果选项择JComboBox1中的第二个张三(也就是第三个),则JComboBox2中显示为25,反之亦然
这个要怎么弄啊??
getSelectedIndex()这个方法总是返回第一个匹配的项
也就是总是返回第一个张的年龄:18

解决方案 »

  1.   

    别再问了,都是hashCode惹的祸:package hezof.swing.japplet;import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.BorderFactory;
    import javax.swing.Box;
    import javax.swing.JApplet;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;/**
     * JComboBox根据Item的hashCode来定位元素.
     * 
     * @author hezof
     * @date 2007-12-28
     */
    public class TJComboBox extends JApplet {
        private JComboBox box1;
        private JComboBox box2;
        private static String[] names = { "张三", "李四", "张三" };
        private static Integer[] ages = {16,25,18};
        private ActionListener listner = new ActionListener() {
    public void actionPerformed(ActionEvent event) {
        JComboBox box = (JComboBox) event.getSource();
        int index = box.getSelectedIndex();
        box1.setSelectedIndex(index);
        box2.setSelectedIndex(index);
    }
        };    private static class MyJComboBox extends JComboBox {
    private static class Item {
        static volatile long itemCount;
        private Object item;     private Item(Object item) {
    this.item = item;
        }     public String toString() {
    return item.toString();
        }     public int hashCode() {
    itemCount++;
    return (int) (itemCount ^ (itemCount >>> 32));
        }     static Item[] valueOf(Object[] items) {
    Item[] result = null;
    result = new Item[items.length];
    for (int i = 0; i < result.length; i++) {
        result[i] = new Item(items[i]);
    }
    return result;
        }
    } public MyJComboBox(Object[] obj) {
        super(Item.valueOf(obj));
    }
        }    public void init() {
    Container content = getContentPane();
    Box box = Box.createHorizontalBox();
    box.setBorder(BorderFactory.createTitledBorder("box"));
    box1 = new MyJComboBox(names);
    box1.addActionListener(listner);
    box2 = new MyJComboBox(ages);
    box2.addActionListener(listner);
    box.add(box1);
    box.add(box2);
    content.add(box, BorderLayout.NORTH);
        }
        public static class Tester{
    public static void main(String[] args){
        JFrame frm=new JFrame();
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frm.setSize(400,300);
        TJComboBox tbox=new TJComboBox();
        tbox.init();
        frm.getContentPane().add(tbox);
        frm.setVisible(true);
    }
        }
    }