[java swing] automatyczne dodawanie wierszy w tabeli

0

Hej
używam Netbeans'a w którym do okienka dodałem metoda przeciągnij upuść jTable, do której to wczytuje rekordy z bazy danych, edytuje i usuwam. Mój problem polega na tym, że rekordy z bazy są widoczne tylko wtedy gdy w design we właściwościach tabeli w zakładce rows dodam 'ręcznie' wiersze, wtedy gdy uruchomię, rekordy się pojawią jeśli nie dodam 'ręcznie' tych pustych wierszy w designie to rekordy się nie wczytają. Mam coś takiego:

 
        //polaczenie do bazy itp....
        DefaultTableModel model = (DefaultTableModel)jTable1.getModel();
        try {
            Statement st = connection.createStatement();
            ResultSet rs = st.executeQuery("SELECT * FROM tab");

            int i = 0;
            while (rs.next()){
                int id = rs.getInt("Nr");
                String imie = rs.getString("Imie");
                String nazwisko = rs.getString("Nazwisko");

                model.setValueAt(id,i,0);
                model.setValueAt(imie,i,1);
                model.setValueAt(nazwisko,i,2);

                i++;
            }
            rs.close();
        } catch (Exception e) {     
            JOptionPane.showMessageDialog(null, "Błąd przy pobieraniu danych - "+e.getMessage(), "Błąd", JOptionPane.ERROR_MESSAGE);
        }

Teraz jak zrobić (jak to obsłużyć) aby zawsze w jTable pojawiało się tyle wierszy ile jest rekordów w tabeli.

0

Spróbuj ogłosić, że dane się zmieniły. Po wczytaniu wywołaj

model.fireTableDataChanged();
0

'bo' to nie pomogło, też tego próbowałem, kombinuję tak:

DefaultTableModel model = (DefaultTableModel)jTable1.getModel();

        int iloscWierszy = model.getRowCount();
        System.out.println(iloscWierszy);

        try {
            Statement st = connection.createStatement();
            ResultSet rs = st.executeQuery("SELECT * FROM tab");

            int i = 0;
            while (rs.next()){

                if(iloscWierszy >= i){
                    iloscWierszy++;
                    System.out.println("wywołał sie if a ilosc wierszy to:"+iloscWierszy);          //to tylko pomocniczo
                }
                int id = rs.getInt("Nr");
                String imie = rs.getString("Imie");
                String nazwisko = rs.getString("Nazwisko");
 
                model.setValueAt(id,i,0);
                model.setValueAt(imie,i,1);
                model.setValueAt(nazwisko,i,2);
 
                i++;
            }
            rs.close();
        } catch (Exception e) {

            JOptionPane.showMessageDialog(null, "Błąd przy pobieraniu danych - "+e.getMessage(), "Błąd", JOptionPane.ERROR_MESSAGE);
        }
 

ale też nie chce ruszyć. Jak mam w bazie przykładowo 7 rekordów a wierszy ustawione we właściwościach tabeli np 5 to przy piątym wywołaniu pętli wyrzuca mi wyjątek: 5>=5. Po prostu nie dodaje wierszy automatycznie tyle ile jest rekordów w tabeli ;/

0

Spróbuj dać po aktualizacji modelu wywołanie jTable1.revalidate();

0

sam musisz dodać nowy wiersz:

 model.addRow(null)

albo ustawić liczbę wierszy:

 model.setRowCount(int i)

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