JComboBox项目更改

时间:2011-06-22 10:29:18

标签: swing jcombobox java

我的JComboBox模型包含item1item2item1等项目。我的问题是,当我在item1中选择第三项(JComboBox)并检查getSelectedIndex()时,它始终返回0.

如果我的模型中的项目相同,我怎样才能获得不同的每个项目的索引?像:

  • item1返回0
  • 第2项返回1
  • item1返回2

3 个答案:

答案 0 :(得分:6)

它返回index = 0.因为方法getSelectedIndex()对JComboBox中的对象使用.equals并将其与所选对象进行比较。在你的情况下,因为item1也在索引0,它找到条件为真并返回0.如果你想获得不同的索引,那么你必须覆盖getSelectedIndex()方法。

Java2s找到的JComboBox默认getSelectedIndex()方法概述:

public int getSelectedIndex() {
        Object sObject = dataModel.getSelectedItem();
        int i, c;
        Object obj;

        for (i = 0, c = dataModel.getSize(); i < c; i++) {
            obj = dataModel.getElementAt(i);
            if (obj != null && obj.equals(sObject))
                return i;
        }
        return -1;
    }

如果项目对象有名称或其他任何东西,你应该在2个条目中有一些东西[可能是itemName],以获得所需的结果。覆盖getSelectedIndex()并比较所有意图不同的东西。如果两个条目完全相同,那么将它添加两次是什么意思?

答案 1 :(得分:4)

如果JComboBox中的两个条目对应于同一个对象,那么即使您单击第3项,所选的实际项目也将是该对象的第一个条目(即索引最低的条目) 我认为这不适用于相同的对象。

答案 2 :(得分:3)

JList对相同的项目没有任何问题。

Working list

import javax.swing.event.*;
import javax.swing.*;

class TestList {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                final String[] items = {"item1", "item2", "item1"};
                final JList list = new JList(items);
                final JTextField output = new JTextField(15);
                JPanel gui = new JPanel();
                gui.add(list);
                gui.add(output);
                list.addListSelectionListener(new ListSelectionListener(){
                    public void valueChanged(ListSelectionEvent lse) {
                        int index = list.getSelectedIndex();
                        String outputText =
                            "Index: " +
                            index +
                            "  Value: " +
                            items[index];
                        output.setText(outputText);

                    }
                });
                JOptionPane.showMessageDialog(null, gui);
            }
        });
    }
}