"ukryty" parametr w combobox

0

Robię małą aplikację bazodanową i szukam możliwości przypisania do kontrolki combobox dodatkowego parametru (id z tabeli), który jednak nie byłby widoczny w polu combo ( jak po dodaniu metodą addItem) a możliwe było by jego "wyłuskanie" po wybraniu określonego Itemu z kontrolki. Muszę tego parametru użyć do kolejnego zapytania do bazy, a nie chcę aby szpecił wyświetlane rekordy w kontrolce combo.

0

Nie jestem pewien o co ci chodzi ? Jeśli chcesz chcesz by każdy item zawierał coś co nie jest wyświetlane, to
użyj metody setRenderer(..).
Zajrzyj tu http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html

0
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

class Option {
    int id;
    String name;
    public Option(int id, String name) {
        this.id = id;
        this.name = name;
    }
    @Override
    public String toString() {
        return name;
    }
}

public class Main {
    public static void main(String[] args) {
        final JFrame frame = new JFrame();
        Object[] data = {new Option(1, "Pierwszy"), new Option(2, "Coś innego"), new Option(3, "Trzeci")};
        final JComboBox jb = new JComboBox(data);
        frame.add(jb);
        frame.setVisible(true);
        jb.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                Option selected = (Option) jb.getSelectedItem();
                JOptionPane.showMessageDialog(frame, "Wybrałeś id=" + selected.id);
            }
        });
    }
}
0

bogdans - nie do końca o to chodziło, ale dzięki za podpowiedź. Hurikhans - działa ! Dzięki !

0

Hej!
Odświerze temat ;)

Mi tez ten przykład pomódł. Wiemy jak pobrać ID a jak je ustawić?

jb.setSelectedItem(???);

mozna tak:

jb.setSelectedItem(data[2]);

Tyle tylko ze to jest bez sensu poniewaz ustawia wedlug iteratora w tablicy a nie wedlug ID w objekcie :(
A co jesli mamy taki mini model selecta i wczytujac z bazy rekordy robimy to tak:

while(rs.next())
 jb.addItem(new ModelSelect(rs.getInt("ID"), rs.getString("NAME")));

...a co w takim przypadku? jak wykonac set'a :( kompletnie nie wiem :/

0
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

class Option {

    int id;
    String name;

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

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

public class Main {

    public static void main(String[] args) {
        final JFrame frame = new JFrame();
        final Object[] data = {new Option(1, "Pierwszy"), new Option(2, "Coś innego"), new Option(3, "Trzeci")};
        final JComboBox jb = new JComboBox(data);
        frame.getContentPane().setLayout(new BorderLayout());
        frame.add(jb, BorderLayout.CENTER);
        final JButton button = new JButton(new AbstractAction("Ustaw na id=2") {

            public void actionPerformed(ActionEvent e) {
                for (Object item : data) {
                    Option option = (Option) item;
                    if (option.id == 2) {
                        jb.setSelectedItem(item);
                        break;
                    }
                }
            }
        });
        frame.add(button, BorderLayout.SOUTH);

        frame.setVisible(true);
        jb.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                Option selected = (Option) jb.getSelectedItem();
                JOptionPane.showMessageDialog(frame, "Wybrałeś id=" + selected.id);
            }
        });
    }
0

No fajnie, ale bardziej by mnie interesowalo dla tego drugiego sposobu kiedy dodaje do comboxa w sposob nie jawny. W tym przypadku nie mam zadnej zmiennej z danymi.

while(rs.next())
 jb.addItem(new ModelSelect(rs.getInt("ID"), rs.getString("NAME")));
0
lusss napisał(a)

No fajnie, ale bardziej by mnie interesowalo dla tego drugiego sposobu kiedy dodaje do comboxa w sposob nie jawny. W tym przypadku nie mam zadnej zmiennej z danymi.

while(rs.next())
 jb.addItem(new ModelSelect(rs.getInt("ID"), rs.getString("NAME")));

Tak sie nie powinno robic :P. A co jeśli będziesz chciał wyświetlić te same elementy w innej kontrolce?. Jeśli już to zrób tak:

List<ModelSelect> models = new ArrayList<ModelSelect>();
while(rs.next()) {
  ModelSelect model = new ModelSelect(rs.getInt("ID"), rs.getString("NAME"));
  models.add(model);
 jb.addItem(model);
}

a potem przy ustawianiu:

              for (ModelSelect model : models) {
                    if (model.id == 2) {
                        jb.setSelectedItem(model);
                        break;
                    }
                }
0

Kurcze dzięki :)

Porwałem się na głeboką wodę - postanowiłem pisać sporą aplikację i myślełem że znam podstawy a tu się okazuje, że duże rzeczy robie a tu takich podstaw brakło.
Węszyłem coś za 'List' no ale jeszcze brakuje mi pewnego poziomu wyobrazenia abstrakcji w jave.

Kod działa a jakże, ale mam kilka takich selectów (wartosc do zaznaczenia pobierana z bazy) i ten kod bedzie znacznie pogrubszal aplikacje. Nie ma jakiegoś mniej linijkowatego kodu? A co z budową MODELU dla jComboBox. Moze na poziomie modelu da rade zaznaczac przy zachowaniu dwu wartosciowego comboxa.

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