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.
Grata
Renata
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.
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
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…
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!!