Nadpisanie toString do różnych celów

0

Witam,

mam klasę przechowującą informację. Instancje mam zgrupowane w ArrayList. Chciałbym wyświetlać te listy w różnych JListach, ale na każdej innej informacje. JList korzysta z toString klasy, żeby dodać ją do listy.
Da się jakoś zmodyfikować toString(), żeby na różnych JListach wyświetlać dane z tej samej klasy, ale z różnych atrybutach, np. na 1 liście wyświetlać 1 zmienną, a na 2. już nie.
Można by dziedziczyć po tej klasie docelowej i tam nadpisywać toStringa, ale może jest jakiś lepszy sposób?

0

Możesz podpiąć do JListy własnego renderera, a własny renderer może korzystać z dowolnej metody (domyślny korzysta z toString()).

0

Jakbym to zrobił: ArrayList<TwojaKlasa>. Tworzysz szybkie POJO, w których będziesz trzymał odpowiednie atrybuty (wada - ile JList tyle klas POJO). Następnie w pętli przekopiowujesz dane z pierwszej listy do drugiej, która ma tylko te atrybuty, które będziesz wyświetlać. Następnie jListe tworzysz za pomocą JList list = new JList(arrayList.toArray());

1

Renderery można zdefiniować tak:

class OtherRenderer extends DefaultListCellRenderer
{
   @Override
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) 
    {
        TwojaKlasa ob = (TwojaKlasa) value;
        return super.getListCellRendererComponent(list, ob.nazwaOdpowiedniejMetody(), index, isSelected, cellHasFocus);
    }
}

a potem

lista.setCellRenderer(new OtherRenderer());
0

Odkopię...

@bogdans
Czy trzeba zawsze nadpisać toString()?

Zrobiłem jak powyżej, renderuje sie ok na liscie. Ale pierwszy domyslny 'wybrany' element nie renderuje sie ok tylko tak: com.package.Model@4724f140

0

Ok. Jak jest setEditable(true)
to trzeba setEditior(new ItemEditor())

class ItemEditor extends BasicComboBoxEditor {
		public void setItem(Object anObject) {
			Model item = (Model) anObject;
			editor.setText(item.getName());
		}
	}

Boilerplate pełną gębą.

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