Dziwne zachowanie JTable i getSelectedRow

Dziwne zachowanie JTable i getSelectedRow
GC
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 6 lat
  • Postów:249
0

Witam mam problem chyba z pobieraniem zaznaczonego wiersza, tzn jeśli nie skorzystam z automatycznego sortowania, które oferuje jTable to pobiera dane zawsze z prawidłowego wiersza. A, gdy kliknę na przykład żeby posortować wg autora (widać na załączniku d2) to już pobiera zły indeks (tzn zawsze wyświetla to co było pierwszym elementem w tabeli bez sortowania). O co tutaj może chodzić ? Mam nadzieję, że załączniki bardziej wyjaśnią o co chodzi.

Kopiuj
int indexWiersza = tabela.getSelectedRow();
Kopiuj
 
        } else if (e.getActionCommand().equals("Edytuj")) {
            try {
                int indexWiersza = tabela.getSelectedRow();
                String tytul = (String) tabela.getModel().getValueAt(indexWiersza, 0);
                String autor = (String) tabela.getModel().getValueAt(indexWiersza, 1);
                RozdzielAutora ra = new RozdzielAutora();
                Autor tempA;
                tempA = ra.rozdziel(autor);
                String imie = tempA.getImie();
                String nazwisko = tempA.getNazwisko();
                String wydawnictwo = (String) tabela.getModel().getValueAt(indexWiersza, 2);
                int rok = (int) tabela.getModel().getValueAt(indexWiersza, 3);
                String opis = (String) tabela.getModel().getValueAt(indexWiersza, 4);
                String isbn = (String) tabela.getModel().getValueAt(indexWiersza, 5);

                aDoAktualizacji = new Autor(imie, nazwisko);
                kDoAktualizacji = new Ksiazka(isbn, tytul, wydawnictwo, rok, opis);

                //teraz możemy wyświetlić nowe okno
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        new OknoEdycja(aDoAktualizacji, kDoAktualizacji);
                    }
                });
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(null, "Najpierw proszę zaznaczyć element.");
            }
  • d1.PNG (32 KB) - ściągnięć: 150
  • d2.PNG (32 KB) - ściągnięć: 135
edytowany 1x, ostatnio: Koziołek
airborn
  • Rejestracja:prawie 16 lat
  • Ostatnio:prawie 7 lat
  • Postów:274
1

Zerknij do dokumentacji JTable. Jest tam wyraźnie zaznaczone, że getSelectedRow zwraca indeks wiersza z wyświetlanego widoku, a nie z modelu. Spróbuj wpierw potraktować numer wiersza tabela.convertRowIndexToModel() i dopiero dla tak skonwertowanego indeksu pobierać wartości z modelu.

edytowany 1x, ostatnio: airborn

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.