Mudar cor da linha num JList [RESOLVIDO]

Boa tarde!

Costumo adicionar linhas ao meu JList da seguinte forma:

((DefaultListModel)meuList.getModel()).addElement("Renata");

Quero saber como posso fazer para que algumas linhas do meu JList fiquem com outra cor. :wink:

Grata
Renata

No Javadoc há um exemplo disso.

http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JList.html

O exemplo começa na linha:

"JList uses a java.awt.Component, provided by a delegate called the cellRendererer, to paint the visible cells in the list. "

Você precisa criar uma classe que implementa ListCellRenderer e que pinta as linhas desejadas com as cores desejadas.

PERFEITO!

Obrigada :wink:

Amigos, tive que reabrir este tópico por causa de um probleminha que encontrei.

Estou usando o seguinte código (de acordo com o exemplo na API como o amigo me indicou):

[code] public class MyCellRenderer extends JLabel implements ListCellRenderer/*, Serializable */{

	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus){

		setText(value.toString());
		if (value.toString().equals(Base.rb.getString("quebraDeLinha").toUpperCase())){
			if (isSelected){
				setBackground(list.getSelectionBackground());
				setForeground(Color.red);
			}else{
				setBackground(list.getBackground());
				setForeground(Color.red);
			}
		}else{
			if (isSelected){
				setBackground(list.getSelectionBackground());
				setForeground(list.getSelectionForeground());
			}else{
				setBackground(list.getBackground());
				setForeground(list.getForeground());
			}
		}
		setEnabled(list.isEnabled());
		setFont(list.getFont());
		setOpaque(true);

		return this;
	}
}

[/code]

De fato funcionou o que eu precisava, que era mudar a cor de um item na lista. Só que resolveu um problema meu e criou outro… :cry:

Vejam na imagem:

Na primeira lista eu não apliquei o código que escrevi acima. Na segunda lista eu apliquei o código.

Reparem na imagem, na lista que eu apliquei o MyCellRenderer, ele “encolheu” minha lista (que era do tamanho da outra), além disso a impressão que tenho é que ele também mudou o tamanho do espaçamento entre os itens da lista. Ficou tudo “esmagado”!!! Reparem no item selecionado, como está diferente a altura! Tenho a impressão de que ele “grudou” os itens do lado esquerdo da lista tb… Enfim, ele mexe no layout! E fica lindo isso! Se eu remover todos os itens da lista a lista volta ao normal, basta adicionar um item e ela muda da forma como falei.

Tem alguma propriedade que preciso mexer pra acertar isso, mas qual???

Por favor, alguma idéia?! :shock:

Brigada

Acho que entendi o que ocorreu. É o seguinte: o ListCellRenderer de um JList não é exatamente um JLabel e sim outra coisa, que depende do seu Look & Feel.

Para o JList calcular a dimensão exata de uma linha, você pode usar setPrototypeCellValue ou então setar os valores de “fixedCellWidth” e “fixedCellHeight” para ficarem de acordo com o que você precisa.

É, o setPrototypeCellValue eu não entendi como usa, mas fazendo com o setFixedCellHeight funcionou certinho.

Obrigada mais uma vez!! :wink: