JComboBox setSelectedItem ne fonctionne pas
Je suis en train de mettre la setSelectedItem
de la JComboBox
dans le constructeur de ma JPanel
classe juste après le remplissage de la zone de liste déroulante.
Je suis définir la valeur de la textbox, mais je ne peux pas comprendre pourquoi setSelectedItem
ne semble pas fonctionner. Des idées?
public StudentProfilePanel(StudentInfo si) {
yesButton.setBounds(50, 346, 69, 40);
noButton.setBounds(121, 346, 56, 40);
this.add(yesButton);
this.add(noButton);
setLayout(null);
comboBoxYear.setModel(new DefaultComboBoxModel(years()));
comboBoxYear.setBounds(202, 365, 62, 23);
if(si.birthdate!=null){
//System.out.println("year value : ["+dateofbirth(si.birthdate)[2]+"]");
comboBoxYear.setSelectedItem(dateofbirth(si.birthdate)[2]);
}
add(comboBoxYear);
comboBoxMonth.setModel(new DefaultComboBoxModel(new String[]{"01","02","03","04","05","06","07","08","09","10","11","12"}));
comboBoxMonth.setBounds(285, 365, 56, 23);
//set month value
if(si.birthdate!=null){
//comboBoxMonth.setSelectedItem(dateofbirth(si.birthdate)[1]);
comboBoxMonth.setSelectedItem("04");
System.out.println("month value : ["+dateofbirth(si.birthdate)[1]+"]");
}
add(comboBoxMonth);
comboBoxDay.setModel(new DefaultComboBoxModel(days()));
comboBoxDay.setBounds(351, 365, 54, 23);
if(si.birthdate!=null){
//comboBoxDay.setSelectedItem(dateofbirth(si.birthdate)[0]);
comboBoxDay.setSelectedItem(dateofbirth(si.birthdate)[0]);
}
add(comboBoxDay);
textFieldFirstName = new JTextField();
textFieldFirstName.setBounds(21, 321, 171, 21);
add(textFieldFirstName);
textFieldFirstName.setColumns(10);
//set the value of first name
textFieldFirstName.setText(si.firstName);
textFieldLastName = new JTextField();
textFieldLastName.setBounds(242, 321, 163, 21);
add(textFieldLastName);
textFieldLastName.setColumns(10);
//set the value of the last name
textFieldLastName.setText(si.lastName);
JPanel panelPersonPhoto = new ImagePanel(
"C:\\Users\\MDJef\\Pictures\\Wallpaper\\General\\11.jpg");
panelPersonPhoto.setBorder(new TitledBorder(null, "",
TitledBorder.LEADING, TitledBorder.TOP, null, null));
panelPersonPhoto.setBounds(21, 20, 384, 291);
add(panelPersonPhoto);
}
Merci beaucoup.
méthodes d'aide que j'ai utilisé
//jf : helper method
public String[] years() {
String[] results = new String[90];
for (int i = 0; i < 90; i++) {
results[i] = Integer.toString(1900 + i);
}
return results;
}
//jf : helper method
public String[] months() {
String[] results = new String[12];
for (int i = 0; i < 12; i++) {
results[i] = Integer.toString(i + 1);
}
return results;
}
//jf : helper method
public String[] days() {
String[] results = new String[31];
for (int i = 0; i < 31; i++) {
results[i] = Integer.toString(i + 1);
}
return results;
}
//jf : helper method
public String[] dateofbirth(String dob) {
String[] tokens = dob.split("-");
return tokens;
}
Qui des ComboBoxes est le problème? Année, mois ou jour?
ans() retourne un tableau de chaînes d'années, tous ces combobox avoir des problèmes, mais regardons les comboBoxMonth pour l'instant. Avec votre solution, je peux maintenant définir la valeur de comboboxmonth, mais il n'a pas encore quand j'ai essayer de le faire à l'intérieur de la si(si.date de naissance!=null){ clause.
À partir de ce que je peux dire, il semble y avoir divergence entre la liste déroulante modèle de valeurs et de ce que l'
ans() retourne un tableau de chaînes d'années, tous ces combobox avoir des problèmes, mais regardons les comboBoxMonth pour l'instant. Avec votre solution, je peux maintenant définir la valeur de comboboxmonth, mais il n'a pas encore quand j'ai essayer de le faire à l'intérieur de la si(si.date de naissance!=null){ clause.
À partir de ce que je peux dire, il semble y avoir divergence entre la liste déroulante modèle de valeurs et de ce que l'
dateofbirth
méthode est de retour...pouvez-vous ajouter un exemple de sortie (c'est à dire une Date
valeur et le renvoi de la sortie de cette méthode) ou la méthode elle-même
OriginalL'auteur Yevgraf Andreyevich Zhivago | 2013-05-26
Vous devez vous connecter pour publier un commentaire.
Les valeurs attribuées à la liste déroulante de la boîte ne sont pas les même valeurs que vous essayez ensemble.
Par exemple, les années sont
String
s de 1900 à 1990, mais si je fournir une valeur72
, il n'y a pas de valeur correspondante dans la liste déroulante pour correspondre.Aussi, votre
days
etmonths
méthodes ne sont que le retour des valeurs qui ne sont pas remplies (c'est à dire01
), où, dans votre code, vous essayez de définir la valeur à l'aide d'un collier de valeur (c'est à dire04
), il n'y a pas de valeur correspondante...Vous avez un certain nombre d'options...
Vous pourriez...
Convertir toutes les valeurs pour un
int
, ce qui signifie que les valeurs dans la liste déroulante sont tout simplementint
s. Vous auriez alors besoin de convertir les valeurs de date enint
s.Ce serait faire de votre aide code ressemble plus à de l'...
Une meilleure solution
Serait d'utiliser un
JSpinner
, qui s'occuperait de la date roulant de questions et de validation automatiquement.Découvrez En utilisant la Norme Spinner Modèles et les Éditeurs
OriginalL'auteur MadProgrammer
Pas liées à votre problème, mais:
N'utilisez pas un null mise en page et setBounds(...). Swing a été conçu pour être utilisé avec le Gestionnaire de configuration. Dans le long terme, vous gagnerez du temps.
Ne pas accéder à des variables dans votre classe directement. Créer une méthode de lecture pour accéder aux propriétés de votre classe.
Ne pas toujours essayer de vous forcer code dans un seul énoncé. Au lieu de faire quelque chose comme:
Cette aide avec votre débogage parce que maintenant vous savez que la variable d'affichage est la même variable que vous essayez d'utiliser dans le setSelectedItem() la méthode. Il enregistre en tapant la déclaration de deux fois et évite les erreurs de frappe.
OriginalL'auteur camickr
Lorsque vous appelez
comboBoxMonth.setSelectedItem("04");
vous essayez de sélectionner une Chaîne nouvellement créée qui n'est pas égal à celui qui est dans votreJComboBox
. Ergo, il n'est pas d'être sélectionné.Vous pouvez essayer quelque chose comme ceci à la place:
Edit: de l'Essayer. Il utilise l'index de l'élément à la place. Juste assurez-vous d'ajouter les mois dans l'ordre de la matrice.
Obtenez-vous la sortie de
System.out.println("month value : ["+dateofbirth(si.birthdate)[1]+"]");
sur votre console lorsque vous exécutez le programme?"vous essayez de sélectionner une Chaîne nouvellement créée qui n'est pas égal à celui qui est dans votre JComboBox" - Mon simple test n'a pas montré de ce problème...
ouais, println fonctionne très bien. valeur du mois : [04] valeur du mois : [04] valeur du mois : [07] valeur du mois : [04] valeur du mois : [04] valeur du mois : [07]
C'est un peu difficile à dire sans savoir ce
dateofbirth()
. Est-il créer de nouvelles Chaînes pour le retour de tableau?OriginalL'auteur Daniel Lerps
Pour les autres développeurs avec la même question:
Un oeil de plus près à la mise en œuvre de
setSelectedItem(Object anObject)
deJComboBox
pourraient vous aider:Dans la boucle de votre objet par rapport à un objet du modèle de données avec le type spécifique
E
. Dans la mise en œuvre de equals() de la Chaîne, vous pouvez voir une vérification de la classe/de l'interface, de longueur et de chaque caractère l'un après l'autre. Cela signifie que, notre objet doit avoir le même type et de tous les caractères doivent être la même!Et c'est la partie la plus ennuyeuse
if (anObject.equals(element))
danssetSelectedItem
! Vous ne pouvez pas remplacer méthode equals de votre élément. Par exempleStudentInfo
et de les comparer à d'autres types comme les chaînes ou des nombres entiers. Exemple Simple. Vous mettre en œuvre combobox comme ceJComboBox<StudentInfo>
et que vous souhaitez sélectionner à l'étudiantint id = 2;
. Si on compare maintenantInteger
avecStudentInfo
. Ici, vous devez remplacer égal dansInteger
...Ma proposition est de remplacer l'. Créer propre classe, ajouter
boolean selectingItem
et remplacersetSelectedItem(Object anObject)
etcontentsChanged(ListDataEvent e)
(cette méthode one-to-one). Néanmoins, j'ai eu des effets secondaires dans un projet...OriginalL'auteur asdf
Utiliser les éléments suivants:
comboBoxMonth.setSelectedItem(index of the array);
OriginalL'auteur Pramod