# JList transparenter Hintergrund



## BlubBlub (19. Sep 2011)

Hi ich habe ein JFrame und dem ContentPane des JFrame habe ich eine JList hinzugefügt.
Das ContentPane hat die Hintergrundfarbe CYAN. 
Standardmäßig ist die Hintergrundfarbe der JList weiß. Ich möchte, dass der Hintergrund der
JList transparent ist, so dass man die Hintergrundfarbe des ContentPane sieht bzw. ein Bild falls 
das ContentPane ein Bild beinhaltet.
Aber ich kriegs nicht hin. Was muss ich im Quellcode korrigieren damit es funktioniert?


```
public class MyFrame extends JFrame
{
	public MyFrame()
	{
		super();
		this.setLayout(new FlowLayout());
		Container contentPane = this.getContentPane();
		contentPane.setBackground(Color.CYAN);
		
		DefaultListModel listModel = new DefaultListModel();
		for(int i=0; i<10; i++)
			listModel.addElement("element " + i);
		
		MyListCellRenderer listCellRenderer = new MyListCellRenderer();
		JList list = new JList(listModel);
		list.setCellRenderer(listCellRenderer);
		list.setVisibleRowCount(5);
		JScrollPane scrollPane = new JScrollPane(list);
                scrollPane.setOpaque(false);
		
		contentPane.add(scrollPane);
		
		setSize(500, 500);
		setVisible(true);
	}
}
```


```
public class MyListCellRenderer extends JLabel implements ListCellRenderer
{

	@Override
	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) 
	{
		list.setOpaque(false);
		setText((String) value);
		
		if(isSelected)
		{
			setOpaque(true);
			this.setForeground(list.getSelectionForeground());
			this.setBackground(list.getSelectionBackground());
		}
		else
		{
			setOpaque(false);
			this.setForeground(list.getForeground());
		}
		
		return this;
	}
}
```


----------



## Michael... (19. Sep 2011)

Die JScrollPane und deren Viewport ist ebenfalls nicht transparent.
Ausserdem würde ich die JList nur einmalig auf transparenz setzen und nich bei jedem Aufruf der getCellRenderer...

```
public static void main(String args[]) {
		JFrame frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setBackground(Color.BLUE);
		JList list = new JList(new String[] {"A", "B", "C", "D"});
		list.setCellRenderer(new DefaultListCellRenderer() {
			public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
				super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
				if (isSelected)
					this.setOpaque(true);
				else
					this.setOpaque(false);
				return this;
			}
			
		});
		
		JScrollPane scroll = new JScrollPane(list);
		scroll.setOpaque(false);
		scroll.getViewport().setOpaque(false);
		list.setOpaque(false);
		frame.add(scroll);
		frame.setBounds(0, 0, 200, 200);
		frame.setVisible(true);
	}
```


----------



## BlubBlub (19. Sep 2011)

Ja perfekt. Danke es klappt.


----------

