[Javalist] Swing, JTable, ListSelectionListener, kiválasztott sor
Zoltán Bernát
bernatzoltan at gmail.com
2012. Nov. 4., V, 15:54:52 CET
Szia!
Ez sem valami szerencses megoldas:
partnersTableModel = new PartnersTableModel();
Minden alkalommal kidobod a regi modelt, amikor uj adatok jonnek? Ezt nem
igy kellene megoldani. Maradjon csak meg az a regi model. Annak van egy
getValuAt(...) metodusa. Abban kell megoldani azt, hogy a friss adatokat
adja a JTable-nek, es ne a regieket. Van a modellednek (ami gondolom egy
DefaultTableModel leszramazott) egy olyan metodusa, ami visszaadja a tabla
sorainak a szamat. Azt felulirtad? Megfelelo modon vissszaadja az uj adatok
megerkezese utan az uj erteket? Ha nem kozlod a tablaval hogy hany sor van
az uj modelben, az talan okozhatja a kivetelt.
"partnersTableModel.fireTableStructureChanged();"
Ez valoban kell? tehat a tabla strukturaja is megvaltozott? Nem csak a
benne levo adatok? mert akkor a fireTableDataChange() is boven eleg.
"corePartnerEntitiesTable.repaint();"
Ez minek? A swing megoldja ezt sajat maga. Ha "kezzel" kell retpaint-elned,
akkor valamit nem jol csinalsz.
Es valoban "kar" az egesz tablat ujra lekerni a serverrol (ber erre lehet
egyeb okod, ami megis indokolja a dolgot).
Sikeres torles utan egyszeruen csinal a tablad modelje egy
fireRowsDeleted(mettol, meddig) eventet, es nem lesz semmilyen
nullPointerException
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/280b6813/attachment.html>
További információk a(z) Javalist levelezőlistáról