Obsługa JList

0

Witam. Mam następujący problem. Nie wiem czy to wystarczy jeżeli nie będę zamieszczał całego kodu ale może ktoś będzie wiedział. Mianowicie problem problem polega na tym, że chcąc obsłużyć JList funkcją:

public void valueChanged(ListSelectionEvent e)
{
String wartosc;
wartosc = (String)list.getSelectedValue();
JOptionPane.showMessageDialog(null, wartosc);
}

Po zaznaczeniu jakiegoś elementu z mojej listy cała powyższa obsługa tego zdarzenia wykonuje się 3 razy.. jeżeli mam więcej pozycji na liście to czasami wykonuje się 9 razy. W czym może tkwić problem?

0

Oczywiście, żadnej pętli tam nie masz ?

W jaki sposób podpinasz ActionListener`a ?

0

Nie nie żadnej pętli.
list.addListSelectionListener(this);

0

Dwukrotne wykonanie kodu jest prawie że oczywiste: jeden element zaznaczasz, drugi się odznacza. Jeśli JList dopuszcza zaznaczenie wielu, to zaznaczając kolejny możesz odznaczyć 35 innych.

0

Ok ale w mojej liście jest ustawione pojedyncze zaznaczenie także przyczyna musi leżeć gdzie indziej :(
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

0

Daj cały kod, tzn. wszystkie instrukcje, w których występuje list.

0

A więc cały projekt zamieszam pod adresem:
http://www.speedyshare.com/files/28899959/Organizer.rar

Najistotniejsze będą funkcje:


public void makeList(int x, int y)
    {
        //c jest potrzebne do ułożenia listy w układzie akruszowym
        c.anchor = GridBagConstraints.NORTH;
        c.gridx = 0;
        c.gridy = 1;

        panel.remove(list);//usówa aktualną listę - do odświerzania listy
        Notatka n;
        listModel.clear();
        listModel.addElement(" ");
        for(int i=0;i<uchwytDoNotatki.getSizeOfLista();i++)
        {
            n = uchwytDoNotatki.getUchwytDoLista().get(i);
            //JOptionPane.showMessageDialog(null, n.getTemat());
            if(listModel.get(0)==" ")
            {
                listModel.remove(0);
            }
            listModel.addElement(n.getTemat());
        }

        //rozmiar listy
        Dimension wymiar = new Dimension(x,y);//ustawia rozmiar
        list.setPreferredSize(wymiar);
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//ustawia, że można zanzaczyć max 1 pole
        //list.setSelectedIndex(0);

        list.addListSelectionListener(this);
        list.setVisibleRowCount(13); //Tyle pozycji na pewno wyświetli - nie pojawi się przewijanie
        panel.add(listaPane,c);
    }

Funkcja tworzy listę. Zrobione jest w niej odświeżanie aby móc dodawać kolejne pozycje do listy.


    public void valueChanged(ListSelectionEvent e)
    {

        String wartosc;
        wartosc = (String)list.getSelectedValue();
        JOptionPane.showMessageDialog(null, wartosc);
    }

Funkcja obsługująca JList. na razie tylko dla testu.

Po naciśnięciu po zaznaczeniu jakiegoś rekordu w w mojej liście MessageDialog wyświetla się po kilka razy.
Bardzo zależy mi na odpowiedzi ponieważ utknąłem z projektem i nie moge ruszyć dalej.

0

Po dopisaniu notatki tworzysz nową listę. Każda z tych list wykonuje metodę valueChanged. Zmień w klasie Manager metodę dodajNotatke na cos takiego

    public int dodajNotatke(Gui x,JTextArea textArea,JCalendar kalendarz)
    {
        String tmp_str;
        String tem;
        tmp_str = textArea.getText();
        tem = JOptionPane.showInputDialog("Podaj temat przypomnienia.");

        Notatka notatka = new Notatka(tem);//tworzy nową notatkę z podanym tematem
        notatka.setNotatka(tmp_str);//zapisuje w notatce jej treść
        getData(kalendarz,notatka);//zapisuje w notatce aktualną datę zaznaczoną w kalendarzu

        notatki.lista.add(notatka);//dodaje notatkę do listy        
        x.listModel.addElement(notatka.getTemat()); //ten wiersz został zmieniony

        return 0;
    }
0

Dzięki serdeczne za pomoc :]

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