JTable i kilka pytań

0

Witam

Chciałbym zrobić aby moja instancja JTable zachowywała się tak jak np w "TotalComanderze" okienka z plikami tzn.:

  • po kliknięciu w element zaznaczał się tylko wiersz bez komórki, czyli coś na kształt JList tylko że z dwoma kolumnami
  • po kliknięciu w dany wiersz chcę "aby coś się działo" czyli zdarzenie które chcę obsłużyć, oglądałem już jeden post na tym forum i już mniej więcej wiem o co chodzi

Moje dotychczasowe starania zrobienie czegoś właśnie takiego zakończyły się klapą tzn:

  • nie potrafię zrobić punktu pierwszego
  • zdarzenie moje działa tak że reaguje dość dziwnie - tabelka ma dwie kolumny i jak kliknę w wybrany wiersz w kolumnę A to zdarzenie zadziała jednak gdy chcę aby znów się coś działo to muszę wybrać wiesz i kliknąć w kolumnę B czyli "na krzyż" nie wiem dlaczego tak się dzieję :(

Dlatego proszę aby ktoś mi podyktował kilka linijek kodu a będę wdzięczny :)

0

Nie rozumiem o co chodzi w punkcie pierwszym. Chcesz by po kliknięciu w dowolną komórkę w wierszu zaznaczony był cały wiersz a nie tylko kliknięta komórka ?

0

Coś właśnie w tym stylu

Po kliknięciu w obojętnie którą komórkę w wierszu chcę aby zaznaczał się cały wiersz bez komórki i chcę aby po kliknięciu w wiersz chcę obsłużyć dane zdarzenie.

0

Teraz pokażę co zdziałałem:

class SelectionListener implements ListSelectionListener
    {
        JTable table;
        SelectionListener(JTable table) 
        {
            this.table = table;
        }
        public void valueChanged(ListSelectionEvent e) 
            {           
               JOptionPane.showMessageDialog(null, "Kliknąłeś", "Udana operacja", 1); 
            }    
          
        } 

A do konstruktora dodałem:

        tabela.getSelectionModel().addListSelectionListener(tabela);
        tabela.getColumnModel().getSelectionModel().addListSelectionListener(listener);

Jednak najdziwniej zachowuje mi się mój program w momencie aktualizacji tabeli. Po kliknięciu w przycisk który wykonuje to:

tabela.setModel(new MyModel(current));

Gdy jakaś komórka w tabeli jest zaznaczona to tabela się źle odrysowuje ponieważ obsłużone jest zdarzenie klasy SelectionListener.

PS Może idzie wyłączyć obsługę wszystkich zdarzeń dodanych do tabeli.

0

Sprawa jest zagadkowa, domyślne zachowanie obiektu JTable jest właśnie takie, że zaznaczany jest cały wiersz. Możliwość zaznaczania komórki trzeba sobie zażyczyć:

tabela.setCellSelectionEnabled(true);

@alinux napisał

  • zdarzenie moje działa tak że reaguje dość dziwnie - tabelka ma dwie kolumny i jak kliknę w wybrany wiersz w kolumnę A to zdarzenie zadziała jednak gdy chcę aby znów się coś działo to muszę wybrać wiesz i kliknąć w kolumnę B czyli "na krzyż" nie wiem dlaczego tak się dzieję
    co Cię dziwi - metoda
valueChanged(..)

jest wywoływana po zmianie zaznaczenia, jak klikasz dwa razy z rzędu w to samo, to nie ma zmiany zaznaczenia. Spróbuj po obsłudze zdarzenia wywołać metodę clearSelection();

0

Wybrałem złą drogę postępowania

Obsłużyłem to wszystko co chciałem za pomocą mojej klasy class ObsługaTabeli extends MouseAdapter implements MouseListener. Teraz wszystko zajefajnie działa :)

Dobrze że na to wpadłem :)

Dzięki za posty :)

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