J'ai créé une petite "calculatrice" en utilisant une interface graphique. Mais quand j'utilise mon bouton d'entrée, il imprime toujours le produit des deux nombres indépendamment de l'opérateur que j'appuie.Pourquoi mon bouton n'effectue-t-il pas l'action appropriée?
class Calculator extends JFrame implements ActionListener{
JTextfield firstN, secondN;
JButton addButton, subButton, divButton, mulButton, enter;
JLabel result;
Calculator(){
// here I initialized all the components and added buttons/ActionListeners
}
public void actionPerformed(ActionEvent e) {
int first = Integer.parseInt(firstN.getText());
int second = Integer.parseInt(secondN.getText());
int value = 0;
if(e.getSource() == addButton){
value = first + second;
}else if(e.getSource() == subButton){
value = first - second;
}else if(e.getSource() == divButton){
value = first/second;
}else{
value = first*second;
}
if(e.getSource() == enter)
result.setText(value + "");
}
Sans le bouton d'entrée, la calculatrice fonctionne correctement. J'ai essayé une boucle de do-while mais cela s'est avéré être un infini.
Je suppose que j'ai quelque chose de mal avec les instructions if/else mais l'une des 4 premières instructions est toujours exécutée, donc la dernière devrait aussi travailler pour autant que je suis concerné ...
a parfaitement fonctionné! rapidement offtopic: pourquoi "value" est-il réinitialisé à chaque fois qu'un bouton est cliqué? pourquoi la variable devrait-elle être un champ de niveau classe? –
@ marie.ellaZ Cela arrive parce que la méthode 'actionPerformed()' s'exécute du début à la fin à chaque fois que vous cliquez sur un bouton. Donc, s'il contient la ligne 'int value = 0;' chaque clic le mettra à zéro. Si vous souhaitez conserver la valeur entre les clics, vous devez la stocker quelque part en dehors de cette méthode, et un champ de niveau classe est une solution évidente pour cela. –