Comment utiliser JCheckBoxes de sélection pour les utiliser?
J'ai une case à cocher sur un JFrame. Quand je vérifie, je veux afficher sur la fenêtre de commande qu'elle a été sélectionnée. Ci-dessous le code que j'ai travaille avec. Il compile et s'exécute sans erreur, mais je ne comprends pas le "a été sélectionné" sur la fenêtre quand j'sélectionnez la case à cocher.
public Checklist() {
...
JCheckBox one = new JCheckBox("CT scan performed");
one.addItemListener(new CheckBoxListener());
}
private class CheckBoxListener implements ItemListener{
public void itemStateChanged(ItemEvent e)
{
if(e.getSource()==one){ if(one.isSelected()){
System.out.println("one has been selected");
}
else{System.out.println("nothing");}
}
}}
OriginalL'auteur razshan | 2011-02-18
Vous devez vous connecter pour publier un commentaire.
J'ai testé cet exemple simple et il fonctionne parfaitement (il écrit
"one has been selected"
lorsque vous sélectionnez la case à cocher, et"nothing"
lorsque vous désélectionner):Dans votre exemple, il semble que
one
est déclaré dans le constructeurCheckList()
. Êtes-vous sûr que l'on peut accéder à l'intérieur de la classeCheckBoxListener
?En fait, vous aviez deux JCheckBox avec le nom
one
: celle qui est définie dans la classeChecklist
, qui a été référencé dans votre auditeur, et l'autre (celui de droite) définie dans le constructeurChecklist()
.OriginalL'auteur olivierlemasle
Vous ne pouvez pas réaliser que vous avez deux cases à cocher en cours dans votre programme!
Je suppose que votre classe ressemble à quelque chose comme ceci:
Vous avez deux copies du "on", le "privé JCheckBox un" qui appartient à la Liste de contrôle, et le "JCheckBox un = ..." dans votre constructeur. Vous remarquerez alors que lorsque vous appelez
vous sont effectivement à l'aide de la temporaire de "un" dans le constructeur, ce qui n'est PAS le même que le "un" en haut de votre classe!
Maintenant, lorsque vous appelez
vous êtes maintenant en utilisant le "on" en haut de votre classe, ce qui n'est PAS de la case que vous voyez dans votre fenêtre!
C'est pourquoi les enlever que "JCheckBox" rend votre programme de travail-aujourd'hui la "une" de votre constructeur est le même que le "un" en haut de votre classe.
Pour rendre cela plus clair, le code suivant est ce que vous êtes VRAIMENT en train de faire dans votre cassé exemple:
OriginalL'auteur donnyton
Vous avez besoin pour ajouter une action d'écoute sur chaque case, à l'exception de la septième, qui n'ont aucune incidence), et re-calculer l'état activé de la touche à chaque fois que l'auditeur est appelé. Voir
addActionListener
.OriginalL'auteur JB Nizet
Afin de parvenir à cette fin, une méthode qui permettra de vérifier pour tous les cas vous vous souciez et de prendre les mesures appropriées lorsqu'un état est atteint. Alors un ActionListener pour chaque case à cocher qui appelle cela un travailleur de la méthode.
OriginalL'auteur unholysampler
Avez-vous vérifié si cette ligne
est ok? Essayez d'enlever pour voir si cela aide.
Les événements peuvent être une douleur réelle avec les sources.
OriginalL'auteur Plínio Pantaleão