[Javalist] Swing, JTable, ListSelectionListener, kiválasztott sor

Zoltán Bernát bernatzoltan at gmail.com
2012. Nov. 4., V, 16:07:15 CET


ja es meg valami:
a JTable valamifelekeppen implicit listenere a modellednek (Tehat gondolom
a swing, amikor a tabladhoz rendeled a modelt, akkor a tabladat
listenerkent hozzakoti a modelhez). Ezert sem szerencses talan kidobni a
modelt minden alkalommal, amikor hivod a servert. Nem tudom, hogy mi
tortenik a regi modellel, amikor uj modelt adsz a tabladhoz. Ha nem
semmisul meg regi model es az pl szinten listenere valami olyan
objektumodnak, ami a tabla adatait hordozza (raadasul nem is deregisztalod
mint listener), es tovabbra is szorja az eventeket a tabladnak a regi
elavult adatokkal, akkor siman johetnek a nullPointerExceptionok. Talan.


2012. november 4. 13:33 András Csányi írta, <sayusi.ando at sayusi.hu>:

> Sziasztok,
>
> Csináltam egy swing alkalmazást, amiben van egy JTable, ami adatokat
> jelenít meg. A felhasználó ezeket soronként tudja törölni. Törlés úgy néz
> ki, hogy
> - kiválaszt egy sort a felhasználó (ennek adatait összeszedjük a
> TableModelből)
> - kérünk egy megerősítést, hogy tényleg törölni akarja-e
> - megerősítés esetén törlünk (szerverhez nyúlunk)
> - ismét lekérjük az aktív adatok listáját
> - frissítjük a JTable -t, hogy csak az aktív adatok jelenjenek meg.
>
> Ez a folyamat odáig teljesen jól működik, hogy ismét lekérem a még aktív
> adatokat. Viszont ilyenkor a JTable elhasal egy
>
> "Exception in thread "AWT-EventQueue-0"
> java.lang.ArrayIndexOutOfBoundsException: -1
>  at java.util.ArrayList.elementData(ArrayList.java:371)
> at java.util.ArrayList.get(ArrayList.java:384)"
>
> Ilyen kivétellel. Nézem már lassan 1 napja, hogy mi a kutyafüle baja van
> és arra jöttem rá, hogy amikor ismételten lekérem az adatokat és az odaadom
> a JTable -nek így:
>
> partnersTableModel = new PartnersTableModel();
>
> partnersTableModel.setData(PartnerServiceComm.getAllActivePartners());
>         corePartnerEntitiesTable.setModel(partnersTableModel);
>         partnersTableModel.fireTableStructureChanged();
>         corePartnerEntitiesTable.repaint();
>
> Akkor valamiért a tábla még azt hiszi, hogy egy sor ki van választva és
> meghívja a
>
> valueChanged(ListSelectionEvent e)
>
> metódust, ami elhasaltatja az egészet.
> A kérdésem, hogy a táblának hogyan lehet megmondani azt, hogy nincsen
> kiválasztva semmi sem? Próbáltam azt, hogy a JTable
> SelectionModel.setLeadSelectionIndex() értékét felülírom, de ez nem ér
> semmit sem, mert a valueChanged metódus ezt felülcsapja - ha jól láttam -
> miután a friss adatokat lekérem és a valueChanged automatikusan meg lesz
> hívva, mert a tábla azt hiszi - talán jogosan, talán nem -, hogy egy sora
> ki van választva.
>
> Az interneten csak olyan cikkeket találtam eddig, amelyek arról szólnak,
> hogy egy kiválasztott sornak hogyan tudod az értékeit megkapni. Ezekkel
> sokra nem mentem.
>
> Tudtok a fenti problémámra valami értelmes megoldást? Gyanítom, hogy nem
> én vagyok az egyetlen, aki ezzel találkozott. Vagy tudtok olyan cikket,
> amiben esetleg ez le van írva? A hivatalos "Hogyan használjuk a JTable-t?"
> cikkben ez nincsen leírva vagy nem vettem észre.
>
> Előre is köszönöm a segítséget!
>
> András
>
>
> --
> --  Csanyi Andras (Sayusi Ando)  -- http://sayusi.hu --
> http://facebook.com/andras.csanyi
> --  ""Trust in God and keep your gunpowder dry!" - Cromwell
>
> _______________________________________________
> Javalist mailing list
> Javalist at lists.javaforum.hu
> http://lists.javaforum.hu/mailman/listinfo/javalist
>
>
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: <http://lists.javaforum.hu/pipermail/javalist/attachments/20121104/fe9c4632/attachment.html>


További információk a(z) Javalist levelezőlistáról