JComboBox ---- co jest zaznaczone?

0

Witam,

Stosuję taki mechanizm działania:

  1. Pobieram z bazy danych parę nazwa i id rekordu w którym znajduje się nazwa (jest to więcej niż jeden rekord)
  2. Z tych par tworzę kolekcję ArrayList
  3. Nazwy wrzucam do JComboBox. Do box'a dodaję ActionListener
  4. Jeżeli użytkownik wybierze coś z JComboBox, sprawdzam w ArrayList id i pobieram dane z bazy.

Problem pojawia się w momencie gdy taka sama nazwa występuje więcej niż jeden raz. Pomyślałem, że wtedy zamiast pobierać nazwę z comboBox po zaznaczeniu przez użytkownika, użyję metody getSelectedIndex(), lecz tu pojawił się kolejny problem. Metoda zwraca index do pierwszego wystąpienia danej nazwy w comboBox, czyli gdy dane wyglądają tak:

Nazwa1
Nazwa2
Nazwa2
Nazwa3

to przy wybraniu przez użytkownika ostatniej 'Nazwa2" (czyli index=2), metoda getSelectedIndex() zwraca 1, czyli pierwsze wystąpienie 'Nazwa2'.

Czy ktoś z Was wie jak sobie poradzić z odczytem poprawnego wybranego index'u? Strasznie mi na tym zależy, ponieważ właśnie taki sposób wybierania danych najbardziej pasuje do mojego projektu... a to taki zonk :-[ Z góry dziękuję za wszelkie sugestie.

0

Mozesz pokazac kod ktorym wypelniasz model tego comboboxa?

0

Model JComboBoxa uzywa czesto metody equals obiektow ktory wsytwietla. Podejrzewam ze Ty do modelu wstawiasz tablice stringow. Przesledz ten kod, dziala poprawnie:

package test;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

class Item {

    public String name;

    public int id;

    public Item(String name, int id) {
        this.name = name;
        this.id = id;
    }

    @Override
    public String toString() {
        return name;
    }

    @Override
    public boolean equals(Object obj) {
        return id == ((Item) obj).id;
    }

}

public class Test {

    private static Item[] model = { new Item("AA", 1), new Item("BB", 2), new Item("BB", 3), new Item("CC", 4) };

    public static void main(String args[]) {
        JFrame f = new JFrame();
        f.setLayout(new FlowLayout());
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JComboBox combo = new JComboBox(model);
        combo.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                JComboBox c = (JComboBox) e.getSource();
                int i = c.getSelectedIndex();
                JOptionPane.showMessageDialog(null, i);
            }

        });

        f.add(combo);
        f.pack();
        f.setVisible(true);
    }
}

Tutaj wstawiane sa Item, a nie String do modelu, i equals porownuje id. Dziala poprawnie. Teraz zamiast getSelectedIndex mozez uzyc getSelectedItem i wybrac z niej id.
Pozdro.

0

Wielkie dzięki [browar]
Masz rację, do comboBox dodawałem same Stringi... Twoje rozwiązanie działa bez zarzutu!

0 użytkowników online, w tym zalogowanych: 0, gości: 0