如何在java中控制多个JComboBox?

时间:2014-12-16 20:25:00

标签: java combobox actionlistener

我在JDialog上设置12个组合框时遇到问题。前4个是4个人的性别。第二个是他们的性格类型。第三个是他们的职称。

CrewEditor

为什么当我改变第一人的性别组合框时,第二,第三,第四性别组合框同时被改变?

为什么他们“联系在一起”?我已经为每个人提供了单独的ActionListener?

与个性组合框和工作组合框相同。

见附图。

对于严重连接它们,我需要做些什么?

此外,Eclipse强迫我在自定义的JComboBoxMW上使用“final”关键字。

请注意,JComboBoxMW没什么特别的。只需通过更好的鼠标滚轮控制扩展JComboBox类。

请参阅下面的部分代码:

   public void setUpCrewGender() {

    List<String> genderList = new ArrayList<String>(2);
    genderList.add("M");
    genderList.add("F");
    genderComboBoxModel = new DefaultComboBoxModel<String>();
    Iterator<String> i = genderList.iterator();

    while (i.hasNext()) {
        String s = i.next();
        genderComboBoxModel.addElement(s);
    }



    final JComboBoxMW<String> g1 = new JComboBoxMW<String>(genderComboBoxModel);
    g1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e1) {
            String s1 = (String) g1.getSelectedItem();
            g1.setSelectedItem(s1);
        }});  
    g1.setMaximumRowCount(2);
    listPane.add(g1);


    final JComboBoxMW<String> g2 = new JComboBoxMW<String>(genderComboBoxModel);
    g2.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e2) {
            String s2 = (String) g2.getSelectedItem();
            g2.setSelectedItem(s2);
        }});  
    g2.setMaximumRowCount(2);   
    listPane.add(g2);       

    final JComboBoxMW<String> g3 = new JComboBoxMW<String>(genderComboBoxModel);
    g3.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e3) {
            String s3 = (String) g3.getSelectedItem();
            g3.setSelectedItem(s3);
        }});  
    g3.setMaximumRowCount(2);
    listPane.add(g3);



    final JComboBoxMW<String> g4 = new JComboBoxMW<String>(genderComboBoxModel);
    g4.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e4) {
            String s4 = (String) g4.getSelectedItem();
            g4.setSelectedItem(s4);
        }});  
    g4.setMaximumRowCount(2);
    listPane.add(g4);

   }

2 个答案:

答案 0 :(得分:2)

所有JComboBox共享相同的模型,即genderComboBoxModel,因此所有视图都将显示相同的模型状态。解决方案:给他们独特的模型。

顺便说一下,考虑使用带有JComboBox编辑器的JTable进行数据输入。

答案 1 :(得分:2)

您为每个ComboBoxModel使用相同的JComboBox,但ComboBoxModel也管理所选项目,因此当一个组合框更新时,所有其他组合框都是更新。

您需要为每个包含您想要显示的数据的组合框创建单独/个人ComboBoxModel