problem z JTable,

0

Czesc,

mam problem z tabelką. Poniżej zamieszczam fragment programu:

wybierz.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Object o = e.getSource();

  if (o==wybierz) {
   

int x =myTable.getSelectedRow();

String wybierane = myTable.getValueAt(x,4).toString();

if( !wybierane.equals("PRAWDA")){

int r = model.getRowCount();

model.insertRow(r, new Object[]{myTable.getValueAt(x,0),
myTable.getValueAt(x,1),
myTable.getValueAt(x,2)});

            }
          }
        }
    });

Problem polega na tym, ze dodaje mi sie do modelu zbyt wiele takich samych wierszy, tzn. jesli klikne raz guzik "wybierz" dopisuje mi sie 1 wybrany wiersz, za drugim kliknieciem dodają sie do modelu 2 takie same wiersze zamiast jednego, za 3 kliknieciem dodaja sie 3 takie same wiersze itd itd. Nie potrafie sobie z tym poradzic, czy moglby mi ktos podpowiedziec w czym tkwi blad?

Pozdrawiam

0

Tak na oko to powinno działać, jeśli oczywiści dobrze rozumiem, że jak zaznaczysz wiersz i klikniesz przycisk x razy to ostatecznie ma dodać x nowych wierszy. Ustaw sobie breakponta na pierwszej instrukcji w actionPerformed i odpal debugera, a potem krok po kroku zobaczysz co się dzieje.

0

nie do konca zrozumiales:)
Chodzi o to, ze x to jest nr zaznaczonego wiersza w tabeli myTable.
Do modelu ma zostac dopisany wiersz o numerze x w myTable, po kiknieciu guzika "wybierz". Problem jest taki, ze do modelu dopisuje sie wiersz x, ale powielony(tzn. za 1 kliknieciem wpisuje sie 1 wiersz, za 2 kliknieciem zamiast jednego wiersza zaznaczonego x wstawiaja sie do modelu 2 takie same wiersze x, za trzecim kliknieciem wstawiaja sie 3 takie same wiersze x, itd itd).

np. tabela po wstawieniu wierszy do modelu wygląda tak:
kasia
marta
marta
tomek
tomek
tomek

a powinna wyglądać tak:
kasia
marta
tomek

0

Zamieszczony fragment wygląda na poprawny. Błąd musi być gdzie indziej. Daj więcej kodu, tylko wpierw go ucywilizuj (sensowne wcięcia), a wklejając na forum wsadź go w znaczniki < code=java> < /code > (bez spacji).

0

guzik.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Object o = e.getSource();

             if (o==guzik) {

            String wyb = (String) lista.getSelectedItem();

                    try {
        
     Ex2rs = Ex1Stmt.executeQuery("SELECT obiekty_s.ifs_code, obiekty_s.ifs_name, 
                            + "komplety_kluczy.nr_seryjny, komplety_kluczy.info,"                 
                            + "komplety_kluczy.wypozyczony, komplety_kluczy.group_id, 
                            + " FROM obiekty_s, komplety_kluczy"
			    + " WHERE obiekty_s.ifs_code=komplety_kluczy.ifs_code"
			    + " AND obiekty_s.ifs_name LIKE'"+ wyb +"%'");

 

           Ex2rs.last();
           licz_row=Ex2rs.getRow();

           myTable = new JTable(licz_row,8); 
                     
           Ex2rs.beforeFirst();
           int  li_row = 0;

   while (Ex2rs.next()) {
      myTable.setValueAt(Ex2rs.getString(1),li_row,0);
      myTable.setValueAt(Ex2rs.getString(2),li_row,1);
      myTable.setValueAt(Ex2rs.getString(3),li_row,2);
      myTable.setValueAt(Ex2rs.getString(4),li_row,3);
      myTable.setValueAt(Ex2rs.getString(5),li_row,4);
      myTable.setValueAt(Ex2rs.getString(6),li_row,5);
      myTable.setValueAt(Ex2rs.getString(7),li_row,6);
      myTable.setValueAt(Ex2rs.getString(8),li_row,7);

         li_row ++;
   }

poprawione, chyba teraz troche ładniej:) wydaje mi się, że jedynie w tym fragmencie moze twkić błąd.

0

W tym fragmencie na pewno jest błąd, tego nie skompilujesz, spójrz na kolorowanie wewnątrz executeQuery().

0

aj, bo tam się zjadł cudzysłów. jest dobrze, kompiluje się i dostaje te wyniki jakich oczekuje. Przy dodawaniu nowych wierszy do modelu nie dostaje tego co byc powinno, jak juz wyzej zostalo napisane, wiersze sie potwarzaja:/

0

Dwa cudzysłowy zjadło ;-) . Po co zamieszczasz kod, który działa dobrze? Ciekawszy jest związek między zmiennymi model i myTable.

0

Zamieszczam, bo tylko w tych 2 fragmentach jest zwiazek miedzy myTable i model i sa to wlasciwie jedyne fragmenty kodu odpowiedzialne za to co sie dzieje w tych dwóch tabelkach:) Wg mnie jest tam wszystko ok i nie potrafie dojsc dlaczego wyswietlaja sie powielone wiersze.
pzdr

0

Ja w podanych fragmentach nie widzę związku między zmiennymi model i myTable. W drugim fragmencie dodajesz coś do zmiennej myTable, w pierwszym fragmencie przepisujesz coś z myTable do zmiennej model. Zmienna model zawiera dane dla myTable, czy dla jakiegoś innego obiektu klasy JTable?

0

model to model tabeli DefaultTableModel, myTable to zwykła tabela JTable. W modelu tabeli model są dane tylko z myTable. Nie wiem czy dobrze zrozumialam i czy o to pytales...

0

Zmęczyło mnie zgadywanie jak wygląda Twój program i dlaczego działa źle. Albo zamieszczasz kod na forum, albo wysyłasz mi mailem (umieść swój adres na forum, to ci prześlę mój), albo dla mnie OT.

0

mmira69[at]go2.pl
dzieki

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