Zaloguj się
Projekty Kategorie Archiwum

Na początku obrazek, żeby było wiadomo o co chodzi:

Free Image Hosting at www.ImageShack.us

Jak widać u góry mamy coś w rodzaju "kart" (JList) z ikonami oraz podpisem. Poniżej znajduje się wybrany panel (Page) z przykładowymi opcjami.

Pozioma lista

Jak powszechnie wiadomo, typowa lista składa się elementów ułożonych pionowo jeden pod drugim. Aby zmienić layout na poziomy, wystarczy ustawić właściwości layoutOrientation oraz visibleRowCount jak poniżej:

pageList = new JList(...
...
pageList.setLayoutOrientation(JList.HORIZONTAL_WRAP);
pageList.setVisibleRowCount(1);

Renderer

Wygląd elementów można łatwo dostosować za pomocą renderera. Renderer to nic innego jak zwykły komponent implementujący interfejs ListCellRenderer. Dla każdego elementu listy wywoływana jest metoda getListCellRendererComponent. W tym właśnie miejscu możemy ustawić ikonę oraz tekst.

pageList.setCellRenderer(new ListRenderer());
...
private static class ListRenderer extends DefaultListCellRenderer {

	@Override
	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
		// ERRATA: DefaultListCellRenderer dziedziczy z JLabel
		// więc dodatkowa deklaracja "JLabel l" nie jest konieczna ;)

		JLabel l = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

		l.setHorizontalAlignment(JLabel.CENTER);
		l.setHorizontalTextPosition(JLabel.CENTER);
		l.setVerticalTextPosition(JLabel.BOTTOM);
			
		Border padding = BorderFactory.createEmptyBorder(5, 10, 5, 10);
		l.setBorder(padding);
			
		Page page = (Page)value;
		l.setIcon(page.icon);
		l.setText(page.title);
			
		return l;
	}
		
}

Klasa Page

Page to prostu zwykły panel zawierający dodatkowo tytuł oraz ikonę. Prosta implementacja wygląda mniej więcej tak:

...
public class Page extends JPanel {
	Icon icon;
	String title;
	public Page(String title, Icon icon) {
		this.title = title;
		this.icon = icon;
...

Download

Source

Proszę o komentarz

dmn
Sobota 6 września, 2008 16:19

fajny i prosty pomysł :)

Sobota 6 września, 2008 19:43

Dzięki,
w cz.2 będzie coś takiego

Napisz komentarz

Dodaj komentarz

Formatowanie komentarza

Kategorie

Ewolucja Internetu 8 | Fail 40 | Gry 46 | Humor 129 | Idiotyzm 50 | Java 110 | KDE 85 | KShutDown 22 | Linux 84 | Makagiga 58 Muzeum 3 | Ogólne 819 | Polityka 76 | Programowanie 51 | Reklamy 4 | Techblog 19 | Teorie Spiskowe 12 | TV 59 | UI 9 | Użyteczność 30 | WWW 90 | Wyrwane z Kontekstu 34 | X Files 14

Archiwum

Maj 2012 | Kwiecień 2012 | Marzec 2012 | Luty 2012 | Styczeń 2012 | Grudzień 2011 | Listopad 2011 | Październik 2011 | Wrzesień 2011 | Sierpień 2011 | Lipiec 2011 | Czerwiec 2011 | Maj 2011 | Kwiecień 2011 | Styczeń 2011 | Listopad 2010 | Październik 2010 | Wrzesień 2010 | Sierpień 2010 | Lipiec 2010 | Czerwiec 2010 | Kwiecień 2010 | Marzec 2010 | Luty 2010 | Styczeń 2010 | Grudzień 2009 | Listopad 2009 | Październik 2009 | Wrzesień 2009 | Sierpień 2009 | Lipiec 2009 | Czerwiec 2009 | Maj 2009 | Kwiecień 2009 | Marzec 2009 | Styczeń 2009 | Grudzień 2008 | Listopad 2008 | Październik 2008 | Wrzesień 2008 | Sierpień 2008 | Lipiec 2008 | Czerwiec 2008 | Maj 2008 | Kwiecień 2008 | Marzec 2008 | Luty 2008 | Styczeń 2008 | Grudzień 2007 | Listopad 2007 | Październik 2007 | Wrzesień 2007 | Sierpień 2007 | Lipiec 2007 | Czerwiec 2007 | Maj 2007 | Kwiecień 2007 | Marzec 2007 | Luty 2007 | Styczeń 2007 | Grudzień 2006 | Listopad 2006 | Październik 2006 | Wrzesień 2006 | Sierpień 2006 | Lipiec 2006 | Czerwiec 2006 | Maj 2006 | Kwiecień 2006 | Marzec 2006 | Luty 2006 | Styczeń 2006 | Grudzień 2005 | Listopad 2005 | Październik 2005 | Wrzesień 2005 | Sierpień 2005 | Lipiec 2005 | Czerwiec 2005 | Maj 2005 | Kwiecień 2005 | Marzec 2005 | Luty 2005 | Styczeń 2005