Mudar cor da linha num JList [RESOLVIDO]

5 respostas
R

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

5 Respostas

T

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.

R

PERFEITO!

Obrigada :wink:

R

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):

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;
    	}
    }

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:

[img]http://gznet.com.br/boo/lista.JPG[/img]

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

T

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.

R

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

Obrigada mais uma vez!! :wink:

Criado 23 de maio de 2007
Ultima resposta 25 de mai. de 2007
Respostas 5
Participantes 2