Изменение элемента JComboBox - PullRequest
1 голос
/ 22 июня 2011

Моя JComboBox модель содержит элементы типа item1, item2, item1.Моя проблема в том, что когда я выбираю третий элемент (item1) в JComboBox и проверяю getSelectedIndex(), он всегда возвращает 0.

Если элемент в моей модели одинаковый, как я могу получить индекс каждого элемента по-разному??Как:

  • item1 возвращает 0
  • item 2 возвращает 1
  • item1 возвращает 2

Ответы [ 3 ]

6 голосов
/ 22 июня 2011

Возвращает индекс = 0. Поскольку метод getSelectedIndex() использует .equals для объектов, находящихся в JComboBox, и сравнивает его с выбранным. В вашем случае, поскольку item1 также имеет индекс 0, он находит условие true и возвращает 0. Если вы хотите получить другой индекс, вам нужно переопределить метод getSelectedIndex().

Схема по умолчанию getSelectedIndex() метода JComboBox, найденного в Java2s :

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;
    }

У вас должно быть что-то [может быть itemName, если у объекта item есть имя или что-то еще], отличающееся в 2 записях, чтобы получить желаемый результат. Переопределите getSelectedIndex() и сравните то, что должно отличаться во всех. Если обе записи полностью совпадают, то какой смысл добавлять их дважды?

4 голосов
/ 22 июня 2011

Если две записи в JComboBox соответствуют одному и тому же объекту, то даже если вы щелкнете по элементу 3, выбранный фактический элемент будет первой записью этого объекта (т. Е. С самым низким индексом) Я не думаю, что это будет работать для тех же объектов.

3 голосов
/ 22 июня 2011

A 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);
            }
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...