2017-02-09 5 views
0

J'ai récemment commencé à apprendre ListCellRenderer pour JComboBox et j'ai finalement eu l'idée de base. Cependant, je ne peux pas définir l'état initial ou l'élément sélectionné initial de la zone de liste déroulante sur null (ou l'index sélectionné sur -1). Je voudrais le mettre à -1 de sorte que lorsque le formulaire se charge, rien n'est encore sélectionné jusqu'à ce que l'utilisateur clique sur le menu déroulant pour sélectionner un élément.Réglage initial de l'index sélectionné de JComboBox à -1 ou rien

J'ai essayé d'utiliser la comboBox.setSelectedIndex(-1) et comboBox.setSelectedItem(null)

 GradeLevelDaoImpl gldi = new GradeLevelDaoImpl(); 
     DefaultComboBoxModel gradeLevelModel = new DefaultComboBoxModel(gldi.getAllActiveGradeLevels().toArray()); 
     jcmbGradeLevel.setModel(gradeLevelModel); 
     jcmbGradeLevel.setRenderer(new JComboBoxRenderer()); 
     jcmbGradeLevel.setSelectedItem(null); //doesn't work 
     jcmbGradeLevel.setSelectedIndex(-1); //doesn't work 

souhaiterai.

Et voici ce que je reçois quand je lance le formulaire.

enter image description here

GradeLevel zone de liste déroulante est toujours sélectionné. L'indice est à 0;

Voici mon moteur de rendu. J'ai même essayé de définir le paramètre index sur -1. index = -1; sans succès. Essayé list.setSelectedIndex(-1), ne fonctionnera toujours pas.

Un conseil ou une solution?

+1

1) 'if (isSelected) { this.setBackground (Color.YELLOW);' Il ne semble pas jaune ici. Est-ce qu'il est jaune quand un article est sélectionné en utilisant la liste déroulante? 2) Pourquoi ne pas définir la première valeur est 's'il vous plaît sélectionner' (ou tout ce qui signifie pour l'utilisateur)? 3) Pour une meilleure aide plus tôt, postez un [MCVE] ou [Short, Self Contained, Example correct] (http://www.sscce.org/). –

+0

Que se passe-t-il lorsque 'value' n'est pas une instance de' ShoolYear', 'GradeLevel',' PaymentTerm', 'FeeCategory'? – MadProgrammer

+0

@MadProgrammer Je reçois la représentation sous forme de chaîne de gradelevel qui est 12. – p3ace

Répondre

1

Vous ne définissez pas de valeur "par défaut" pour le moteur de rendu (ou du moins vous ne vérifiez pas si le value est null).

Rappelez-vous, cela est partagé avec tous les éléments du composant, de sorte que vous devez configurer toutes les propriétés qui peuvent être modifiés entre l'objet différentes valeurs

public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 
    //Class value conversion to getString value using getter 

    if (value instanceof SchoolYear) { 
     this.setText("" + ((SchoolYear) value).getStart()); 
    } else if (value instanceof GradeLevel) { 
     this.setText("" + ((GradeLevel) value).getGradelevel()); 
    } else if (value instanceof PaymentTerm) { 
     this.setText("" + ((PaymentTerm) value).getPaymentTerm()); 
    } else if (value instanceof FeeCategory) { 
     this.setText("" + ((FeeCategory) value).getFeeCategory()); 
    } else { 
     this.setText("---"); 
    } 

    //selection formatting 
    if (isSelected) { 
     this.setBackground(Color.YELLOW); 
     //this.setBackground(list.getSelectionBackground()); 
     this.setForeground(list.getSelectionForeground()); 
    } else { 
     this.setBackground(list.getBackground()); 
     this.setForeground(list.getForeground()); 

    } 

    if ((isSelected) && (cellHasFocus)) { 
     this.setBorder(new LineBorder(Color.black)); 
    } else { 
     this.setBorder(null); 
    } 
    return this; 
} 

Ceci affichera --- lorsque la valeur est l'une des les valeurs que vous êtes prêt à rendre