# Strings in JList ausrichten/links/rechts/mittig



## Falco (24. Aug 2007)

Hallo,

wie kann ich Zeichenketten in einer Jlist ausrichten? Habe in der forumssuche nichts gefunden und auch sonst gibts irgendwie keine tuts dazu?? Kann mir jemand helfen?

Da ist mein JList Code nur setHorizontal etc... funktioniert nicht, wie sonst?


```
private DefaultListModel listModel = new DefaultListModel();
private JList liste = new JList(listModel);
private JScrollPane listbereich = new JScrollPane(liste);
```


----------



## André Uhres (24. Aug 2007)

Versuch's mal mit einem ListCellRenderer. Zum Beispiel:

```
liste.setCellRenderer(new Renderer());
```
Der Renderer:

```
class Renderer extends DefaultListCellRenderer{
    public Component getListCellRendererComponent(JList list, Object value, 
            int index, boolean isSelected, boolean cellHasFocus) {
        JLabel c = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        c.setHorizontalAlignment(CENTER);// LEFT, RIGHT
        return c;
    }
```
Oder so:

```
class Renderer extends DefaultListCellRenderer{
    public Renderer(){
        setHorizontalAlignment(CENTER);// LEFT, RIGHT
    }
}
```
Die erste Variante ist flexibler, weil man die Ausrichtung innerhalb der Liste für jede Zeile anders
machen kann :wink:


----------



## Falco (24. Aug 2007)

> Die erste Variante ist flexibler, weil man die Ausrichtung innerhalb der Liste für jede Zeile anders
> machen kann :wink:




 :shock:  uiii fein danke dir  :toll:


----------



## Falco (24. Aug 2007)

```
class Renderer extends DefaultListCellRenderer
	{
	    public Renderer()
	    {
	        setHorizontalAlignment(CENTER);       
	        setBackground(new Color(111,222,50));
	        
	    }
	}
```

also zentriert klappt schon mal doch warum ist der Background nicht farbig ? bekomme keine fehlermeldung, dennoch geht es nicht?


----------



## Falco (24. Aug 2007)

```
c.setBackground(new Color(100,50,250));
```

obiger code geht mit der flexiblerer Variante nur warum?


----------



## André Uhres (25. Aug 2007)

Wenn du getListCellRendererComponent nicht überschreibst, dann geht es nicht, 
weil die default Implementation dieser Methode einen setBackground macht 
mit der Hintergrundfarbe von JList. Mit 
	
	
	
	





```
liste.setBackground(..);
```
 würde es also in dem Fall funktionieren.

Wenn du jedoch getListCellRendererComponent überschreibst, 
dann bist du natürlich Herr der Lage und kannst alle Properties setzen wie du Lust hast :wink:


----------



## Falco (25. Aug 2007)

André Uhres hat gesagt.:
			
		

> Wenn du getListCellRendererComponent nicht überschreibst, dann geht es nicht,
> weil die default Implementation dieser Methode einen setBackground macht
> mit der Hintergrundfarbe von JList. Mit
> 
> ...



Also dann bin ich doch lieber Herr der Lage  :lol:  und färbe nur 1 Item (kann ja per if abfrage prüfen ob der index der jlist gerade /ungerade ist und dann entscheide ichmich für weiß/ganz hellgrau) das list.setBackground(); macht ja alles farbig dafür brauch ich ja keinen extra Renderer ;-)


----------



## Falco (25. Aug 2007)

so bekomme jetzt ne fehlermeldung:


```
public JComponent getListCellRendererComponent(JList list, Object value,int index, boolean isSelected, boolean cellHasFocus)
    {
        JLabel c = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        c.setHorizontalAlignment(CENTER);
        c.setBackground(new Color(250,250,250));
       
        
        	int pos = Integer.valueOf((list.getModel().getElementAt(index)).toString()) % 2; 
        	 
        	if(pos == 0) 
        	{
        		c.setBackground(Color.WHITE);
        	}
        	else 
        	{
        		c.setBackground(Color.LIGHT_GRAY);
        	}
        return c;
    }
```

und zwar: 





> Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "Dies ist eine Zeichenkette in der liste"



Was ich erreichen möchte ist von jedem eintrag in der Liste prüfen ob dessen indexposition gerade /ungerade ist und anhand dessen setze ich die hintergrundfarbe.

google:





> Die NumberFormatException wird ausgelöst, wenn Zahlen in einem falschen Format vorliegen, beispielsweise bei der Konvertierung eines Strings in eine Zahl.



hm... eigentlich müsste ich ja auf das listmodel zugreifen mit

Aus der .class wo meine JList deklariert ist:

 public int getListItem(int myIndex)
	 {

		return (Integer) listModel.getElementAt(myIndex);

	 }

so wirds dann aufgerufen in der Renderer.class:


```
public JComponent getListCellRendererComponent(JList list, Object value,int index, boolean isSelected, boolean cellHasFocus)
    {
        JLabel c = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        c.setHorizontalAlignment(CENTER);
        c.setBackground(new Color(250,250,250));
       
        
        	//int pos = Integer.valueOf((list.getModel().getElementAt(index)).toString()) % 2; 
        	int pos = (int) release.getListItem(index); 
        	
        	if(pos == 0) 
        	{
        		c.setBackground(Color.WHITE);
        	}
        	else 
        	{
        		c.setBackground(Color.LIGHT_GRAY);
        	}
         
        return c;
    }
```

Fehlermeldung: 



> Exception in thread "main" java.lang.NullPointerException
> at Renderer.getListCellRendererComponent(Renderer.java:20)
> at Renderer.getListCellRendererComponent(Renderer.java:1)



Weiß jemand weiter?


----------



## Falco (25. Aug 2007)

Die Klasse heißt Release habe ich vergessen zu schreiben:

Aus der Release.class wo meine JList deklariert ist:

```
public int getListItem(int myIndex)
{

return (Integer) listModel.getElementAt(myIndex);

}
```

und release ist eine instanz der KLasse Release


```
int pos = (int) release.getListItem(index);
```


----------



## André Uhres (25. Aug 2007)

"index" ist doch schon die Position, wozu die zusätzlichen Methodenaufrufe?


----------



## Falco (25. Aug 2007)

André Uhres hat gesagt.:
			
		

> "index" ist doch schon die Position, wozu die zusätzlichen Methodenaufrufe?



OMG  :shock:  wie verpeilt war ich da und mach da 1 stunde dran rum  :lol: 


```
public JComponent getListCellRendererComponent(JList list, Object value,int index, boolean isSelected, boolean cellHasFocus)
    {
        JLabel c = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        c.setHorizontalAlignment(CENTER);
        int pos = index % 2;         	
        if(pos == 0) 
    	{
    		c.setBackground(new Color (255,255,255));
    	}
    	else 
    	{
    		c.setBackground(new Color(240,240,240));
    	}         
        return c;
    }
```
    :wink:


----------

