Modyfikacja zmiennej podczas klikania na pozycję JList

0

Witam,
jestem początkowym programistą, masę pomocy wyszukuję ale tu już rozkładam ręce. Na pewno rozwiązanie jest proste ale nigdzie nie mogę znaleźć sposobu, mianowicie...

Posiadam listę JList która wypełnia się danymi z bazy danych MySQL jako ciągi znaków.
posiadam button USUŃ którym chciałbym oprócz usuwania pozycji z listy, co jest proste w wykonaniu, również usuwał daną pozycję z bazy danych. I tu natrafiłem na problem, jak przekazać do jakieś zmiennej np. ID zaznaczenia odpowiadające jej w bazie danych?
Coś w stylu:

int id = jListPeople.getSelectedIndex();

Tylko żeby ID nie oznaczała aktualnej pozycji na liście tylko wczytywała unikalny indeks pobrany z bazy danych?
Czekam na pomoc bądź informację jakie muszę podać by pomóc zrozumieć problem.

Z góry dziękuję.

0

Wstawiaj kod w znaczniki <tt><code=java > </code ></tt> - bez spacji!
Stwórz jakąś klasę (powiedzmy Kl), w której jednym z pól jest ID, drugim pole może być typu String. Umieść w klasie metodę toString(), która zwróci to co chcesz wyświetlać i metodę getID(), która zwróci ID z bazy. Potem stwórz kolekcję

kol = Vector<Kl>;

i JListę jList = JList(kol);

. Do ID z bazy dotrzesz tak:<code class="java">jList.getSelectedValue().getID();
0

Przepraszam za znaczniki.

To już dużo mi wyjaśniło i już potrafię sobie wyobrazić jak to ma działać ale gorzej z wykonaniem... Mam problem ze zrobieniem kolekcji... W tej chwili doszedłem do tego:

public MainAdmin() {
        initComponents();
        listModel = new DefaultListModel();
        jListPeople.setModel(listModel);
        try (Statement stm = con.createStatement();){
                String sql =("SELECT * FROM users");
                ResultSet rs = stm.executeQuery(sql);
                while(rs.next()) {
                    Record rekord = new Record();
                    rekord.id = rs.getInt("id");
                    rekord.str = "<html><pre> "+rs.getString("id")+"  "+rs.getString("surname")+"\t"+rs.getString("names")+"</pre></html>";\
                    listModel.addElement(rekord);
                    jListPeople.repaint();
                }    
            } catch (SQLException ex) {
                Logger.getLogger(Register.class.getName()).log(Level.SEVERE, null, ex);
            } 
    }

Jakie błędy popełniłem bądź czego mi jeszcze brakuje do poprawnego działania?
Z góry dziękuję

0

A gdzie jest definicja klasy?

class Record
{
     private int id;
     private String opis;
     public Record(int id,String opis)
     {
         this.id = id;
         this.opis = opis;
     }
     public int getId()
     {
         return id;
     }
     public String toString()
     {
          return opis;
     }
}
        DefaultListModel<Record> model = new DefaultListModel<Record>();
        JList<Vector<Record>> jListPeople = new JList(model);
        try (Statement stm = con.createStatement();){
                String sql =("SELECT * FROM users");
                ResultSet rs = stm.executeQuery(sql);
                while(rs.next()) {
                    model.addElement(new Record(rs.getInt("id"),"<html><pre> "+rs.getString("id")+"  "+rs.getString("surname")+"\t"+rs.getString("names")+"</pre></html>"));
                }
                validate();
                pack();
                jListPeople.repaint();    
            } catch (SQLException ex) {
                Logger.getLogger(Register.class.getName()).log(Level.SEVERE, null, ex);
            } 
    }
0

Klasa istniała tylko jej nie wstawiłem do postu za to reszta bardzo mi pomogła. Zrozumiałem konstrukcję całej kolekcji tylko jednak coś jest nie tak z "malowaniem" JListPeople. Dodałem cudzysłów przed <html>...</html> bo chyba brakowało jednak po wykonaniu polecenia widzę pusty JList.

Od razu zapytam gdyż również sprawdziłem że nie mam dostępu do funkcji getId() gdy programuję przykładowy button

private void jButtonDeleteActionPerformed(java.awt.event.ActionEvent evt) {                                              
       Integer i = jListPeople.getSelectedValue().getId();
    }       

Dziękuję za zainteresowanie, pomoc i przepraszam że jeszcze nie mogę sobie poradzić :/

0

Wiersz

JList<Vector<Record>> jListPeople = new JList(model);

zamieściłem w ramach przykładu, żebyś wiedział jakiego typu ma być pole jListPeople w klasie. Zastąp ten wiersz takim

jListPeople = new JList(model);

i odpowiednio zdefiniuj pole.
Powyższy kod sugeruje, że używasz Buildera z NetBeans. Nigdy nie analizuje i nie poprawiam tego barachła, które on generuje.

0

Nie wiedziałem że są takie różnice podczas korzystania z tego Buildera ale przepisanie tego bez jego udziału to nie problem.

Co masz na myśli pisząc "odpowiednio zdefiniuj pole"?

0

Ty poważnie pytasz?

JList<Vector<Record>> jListPeople = null;
0

Tak, bo nie bardzo rozumiem. Wyżej podałeś mi gotowy kod i niestety nie wiem gdzie mam wprowadzić te zmiany :/ Być może już za bardzo się stresuję gdyż program mam mieć gotowy na weekend i tylko to stanęło mi na przeszkodzie...

Będę próbował jakoś to zrozumieć i osiągnąć efekt drukowania JList.

Dziękuję za pomoc, rozumiem że taki laik może czasami zadawać bezsensowne pytania ale niestety nie wiem jak osiągnąć działanie tego kodu...

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