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