2016-04-06 3 views
0

Pourquoi l'arrière-plan de l'élément sélectionné ne change pas? Je sais sûrement que j'appuie sur un élément de la liste parce que mon System.out.println indique ma sélection actuelle et l'identifiant de l'élément sélectionné. Pas d'erreur, rien ne fonctionne pas. Pourquoi ?La couleur d'arrière-plan de l'élément sélectionné dans JList ne fonctionne pas

Object[] tablen = sqltable.toArray(); 
JList list; 
list = new JList(tablen);      
list.addListSelectionListener(new ListSelectionListener(){ 
    @Override 
    public void valueChanged(ListSelectionEvent e) { 
    int idx = list.getSelectedIndex(); 
    setOpaque(true); 
    if (idx != -1){ 
    //list.setSelectionBackground(Color.lightGray); 
    // list.setSelectionForeground(Color.lightGray); 
    setForeground(Color.red); 
    setBackground(Color.BLUE); 
    setBackground(list.getSelectionBackground()); 
    setForeground(list.getSelectionForeground()); 
    System.out.println("Current selection: " + tablen[idx]); 
    }else{ 
    setForeground(Color.red); 
    setBackground(Color.BLUE); 
    setBackground(list.getBackground()); 
    setForeground(list.getForeground()); 
    System.out.println("Please choose a language."); 
     } 
    }      
}); 
    list.setCellRenderer(new ListCellRenderer() { 
    @Override 
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
    String[] val = (String[]) value; 
    return new JLabel(val[0]); 
    }       
}); 
+0

nop j'ai essayé cela et je ne peux pas retourner c dans mon moteur de rendu cellulaire parce que si je fais cela je vais perdre JLabler retour –

+0

aussi essayer de lire la question avant de le marquer comme doublon, ne pas regarder le titre comme donné –

Répondre

2

Prenez garde dans votre implémentation de CellRenderer que JLabel est non opaque par défaut, et est probablement la raison pour laquelle la couleur d'arrière-plan dans la CellRenderer liste n'est pas peint. (Voir related)

D'autre part, je voudrais jeter un oeil à Providing a Custom Renderer pour un meilleur exemple sur la façon de mettre en œuvre un rendu de cellule personnalisé.