J'écris un programme pour calculer GPA. Il se compose de plusieurs panneaux. Le premier panneau indique à l'utilisateur de spécifier le nombre de cours afin que Comboboxes (gradeCombo), (hourCombo) et Textfields soient ajoutés dynamiquement au deuxième panneau. Tout va bien à ce point mais le problème est avec les auditeurs. Dans les premiers stades, j'ai enregistré les écouteurs d'événement pour ces comboboxes individuellement pour chaque élément dans le tableau et il a abouti à 900 lignes de codes, mais cela a bien fonctionné et tous mes résultats étaient corrects. Pour améliorer mon code, j'essaye d'écrire une boucle for pour enregistrer les événements pour les comboboxes et jusqu'ici je n'ai pas réussi.Comment ajouter ItemListeners dynamiquement?
J'ai essayé d'écrire le code de gestion en tant que classe interne anonyme et comme classe interne séparée, voici mon dernier essai:
for(i = 0; i<courseN;i++)
{
hourCombo[i].addItemListener(new HoursHandler());
gradeCombo[i].addItemListener(new GradeHandler());
}
public class HoursHandler implements ItemListener
{
public void itemStateChanged(ItemEvent event)
{
if(event.getStateChange()==ItemEvent.SELECTED)
{
String hour;
hour = (String) hourCombo[i].getSelectedItem();
currentHour[i]=Integer.parseInt(hour);
aquiredHours=aquiredHours+currentHour[i] prevHour[i];
prevHour[i]=currentHour[i];
}
}
}
public class GradeHandler implements ItemListener
{
public void itemStateChanged(ItemEvent event)
{
if(event.getStateChange()==ItemEvent.SELECTED)
{
String grade;
grade=(String) gradeCombo[i].getSelectedItem();
switch(grade)
{
case "A+":
currentPoint[i]=5*currentHour[i];
break;
case "A":
currentPoint[i]= 4.75 * currentHour[i];
break;
case "B+":
currentPoint[i]= 4.5 * currentHour[i];
break;
case "B":
currentPoint[i]= 4 * currentHour[i];
break;
case "C+":
currentPoint[i]= 3.5 * currentHour[i];
break;
case "C":
currentPoint[i]= 3 * currentHour[i];
break;
case "D+":
currentPoint[i]= 2.5 * currentHour[i];
break;
case "D":
currentPoint[i]= 2 * currentHour[i];
break;
case "F":
currentPoint[i]= 1 * currentHour[i];
break;
}
aquiredPoints=aquiredPoints+currentPoint[i]-prevPoint[i];
prevPoint[i]=currentPoint[i];
}
}
}
Je reçois un NullPointerException pour cette déclaration:
hour = (String) hourCombo[i].getSelectedItem();
et tout va mal, aucune de mes variables n'est mise à jour et je ne peux pas calculer le GPA ..
Merci beaucoup pour votre aide. J'ai le problème que j'ai créé maintenant. – user3458260