IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Probleme avec la calculatrice


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 213
    Par défaut Probleme avec la calculatrice
    Bonjour, je suis un tuto sur java, et j'en suis rendu ou on me demande de faire une calcuculatrice, je regarde le code qu'il me donne, et j'en refait un a ma maniere, le voici(c'est le code qui gere les evennements, pas celui de la calculatrice):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public class moteurCalcul implements ActionListener {
     
    	calculatrice1 parent; //on stokera une reference a la calculatrice
    	float resultatCourant = 0;
    	float valeurAffiché = 0;
    	char bouttonAction = ' ';
     
    	// Le constructeur stocke la référence à la fenêtre
    	// Calculatrice dans la variable membre parent
    	moteurCalcul(calculatrice1 parents) {
    	this.parent = parents; //la reference a la calculatrice donc parent, est egale ace qu'on a envoyé parents
    	}
     
    	public void actionPerformed(ActionEvent événement) {
    		JButton bouttonclique = (JButton) événement.getSource(); //on transforme l'evenement en JButton
    		String texteChampAffichage = parent.champAffichage.getText(); //on retrouve le texte de l'afichage et on le met dans la variable
    		float noteChampAffichage = Integer.valueOf(texteChampAffichage).floatValue();
    		if(texteChampAffichage != "") {
    			valeurAffiché = noteChampAffichage;
     
    		}
     
    		Object sourceEvenement = événement.getSource(); //second evenement en object
     
    		if(sourceEvenement == parent.bouttonplus) {
    			parent.champAffichage.setText("");
    		}
     
    	}
     
    }
    Comme vous pouvez le constater, le code n'est pas fini, mais il me met une rreure a la ligne suivante:

    if(sourceEvenement == parent.bouttonplus) {

    Pourtant, sur le tuto, c'est bien comme ca, bouttonplus est implanter dans calculatrice et est add au moteur calcul, je ne pense pas que ca vienne de la. si quelqu'un a une idée...

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    Il est probable que bouttonplus ne soit pas visible dans ta classe. bouttonplus doit être déclaré protected si il est dans le même package que la classe qui va le lire ou public si il est dans un autre package.

    Tu peut aussi faire un accesseur dans la classe du parent :
    public JButton getBouttonPlus() {
    return bouttonplus;
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 213
    Par défaut
    ok c'est bon a ce niveau là, j'avais déjà eu le meme probleme. Mais maintenant j'ai una utre probleme, le code marche bien, rien n'est souligné en rouge, mais quand je le run, il me met un message d'erreur.

    Voici le code de la calculatrice:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    import javax.swing.*;
    import java.awt.GridLayout;
    import java.awt.BorderLayout;
     
    public class calculatrice1 {
     
    	public JTextField champAffichage;
    	public JButton boutton1;
    	public JButton boutton2;
    	public JButton boutton3;
    	public JButton boutton4;
    	public JButton boutton5;
    	public JButton boutton6;
    	public JButton boutton7;
    	public JButton boutton8;
    	public JButton boutton9;
    	public JButton bouttonvirgule;
    	public JButton bouttonegale;
    	public JButton bouttonplus;
    	public JButton bouttonmoins;
    	public JButton bouttondivise;
    	public JButton bouttonfois;
     
    	// Constructeur
    	calculatrice1() {
    	JPanel p1 = new JPanel();
    	JPanel panneauChiffre = new JPanel();
    	BorderLayout disposition1 = new BorderLayout();
    	GridLayout disposition2 = new GridLayout(4, 3);
    	panneauChiffre.setLayout(disposition2);
    	p1.setLayout(disposition1);
    	champAffichage = new JTextField(30);
    	p1.add("North", champAffichage );
     
    	 boutton1 = new JButton("1");
    	 boutton2 = new JButton("2");
    	 boutton3 = new JButton("3");
    	 boutton4 = new JButton("4");
    	 boutton5 = new JButton("5");
    	 boutton6 = new JButton("6");
    	 boutton7 = new JButton("7");
    	 boutton8 = new JButton("8");
    	 boutton9 = new JButton("9");
    	 bouttonvirgule = new JButton(",");
    	 bouttonegale = new JButton("=");
    	 bouttonplus = new JButton("+");
    	 bouttonmoins = new JButton("-");
    	 bouttondivise = new JButton("/");
    	 bouttonfois = new JButton("x");
     
     
    	panneauChiffre.add(boutton1);
    	panneauChiffre.add(boutton2);
    	panneauChiffre.add(boutton3);
    	panneauChiffre.add(boutton4);
    	panneauChiffre.add(boutton5);
    	panneauChiffre.add(boutton6);
    	panneauChiffre.add(boutton7);
    	panneauChiffre.add(boutton8);
    	panneauChiffre.add(boutton9);
    	panneauChiffre.add(bouttonvirgule);
    	panneauChiffre.add(bouttonegale);
    	panneauChiffre.add(bouttonplus);
    	panneauChiffre.add(bouttonmoins);
    	panneauChiffre.add(bouttondivise);
    	panneauChiffre.add(bouttonfois);
     
     
    	p1.add("Center", panneauChiffre);
     
    	JFrame cadre = new JFrame("calculatrice");
    	cadre.setContentPane(p1);
    	cadre.setSize(800, 200);
    	cadre.setVisible(true);
     
    	moteurCalcul Moteurcalcul = new moteurCalcul(this); // la classe calculatrice fait une intance de MoteurCalcul et 
    	                                                    //  s'envoie au constructeur moteurcalcul
     
    	boutton1.addActionListener(Moteurcalcul);
    	boutton2.addActionListener(Moteurcalcul);
    	boutton3.addActionListener(Moteurcalcul);
    	boutton4.addActionListener(Moteurcalcul);
    	boutton5.addActionListener(Moteurcalcul);
    	boutton6.addActionListener(Moteurcalcul);
    	boutton7.addActionListener(Moteurcalcul);
    	boutton8.addActionListener(Moteurcalcul);
    	boutton9.addActionListener(Moteurcalcul);
    	bouttonvirgule.addActionListener(Moteurcalcul);
    	bouttonegale.addActionListener(Moteurcalcul);
    	bouttonplus.addActionListener(Moteurcalcul);
    	bouttonmoins.addActionListener(Moteurcalcul);
    	bouttondivise.addActionListener(Moteurcalcul);
    	bouttonfois.addActionListener(Moteurcalcul);
     
     
    	}
     
    	public static void main(String[] args) {
    		// Instancie la classe Calculatrice
    		calculatrice1 calc = new calculatrice1();
     
    	}
     
    }
    Le code qui gère les evenements:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.JButton;
     
     
    public class moteurCalcul implements ActionListener {
     
    	calculatrice1 parent; //on stokera une reference a la calculatrice
    	float resultatCourant = 0;
    	float valeurAffiché = 0;
    	char bouttonAction = ' ';
    	float resultatFinal = 0;
    	String resultat = null;
     
    	// Le constructeur stocke la référence à la fenêtre
    	// Calculatrice dans la variable membre parent
    	moteurCalcul(calculatrice1 parents) {
    	this.parent = parents; //la reference a la calculatrice donc parent, est egale ace qu'on a envoyé parents
    	}
     
    	public void actionPerformed(ActionEvent événement) {
    		JButton bouttonclique = (JButton) événement.getSource(); //on transforme l'evenement en JButton
    		String libelle = bouttonclique.getText();
    		String texteChampAffichage = parent.champAffichage.getText(); //on retrouve le texte de l'afichage et on le met dans la variable
    		float noteChampAffichage = Float.parseFloat(texteChampAffichage);
    		parent.champAffichage.setText(libelle);
    		if(texteChampAffichage != "") {
    			valeurAffiché = noteChampAffichage;
     
    		}
     
    		 Object sourceEvenement = événement.getSource(); //second evenement en object
     
    		  if(sourceEvenement == parent.bouttonplus) {
    			parent.champAffichage.setText("");
    			bouttonAction = '+';
    			resultatCourant = valeurAffiché;
    		}
    		else if(sourceEvenement == parent.bouttonmoins) {
    			parent.champAffichage.setText("");
    			bouttonAction = '-';
    			resultatCourant = valeurAffiché;
    		}
    		else if(sourceEvenement == parent.bouttondivise) {
    			parent.champAffichage.setText("");
    			bouttonAction = '/';
    			resultatCourant = valeurAffiché;
    		}
    		else if(sourceEvenement == parent.bouttonfois) {
    			parent.champAffichage.setText("");
    			bouttonAction = '*';
    			resultatCourant = valeurAffiché;
    		}
     
    		else if(sourceEvenement == parent.bouttonegale) {
     
    			if(bouttonAction == '+') {
    				resultatFinal = resultatCourant+valeurAffiché;
    				resultat = resultat.valueOf(resultatFinal);
    				parent.champAffichage.setText(resultat);
    			}
    			if(bouttonAction == '-') {
    				resultatFinal = resultatCourant-valeurAffiché;
    				resultat = resultat.valueOf(resultatFinal);
    				parent.champAffichage.setText(resultat);
    			}
    			if(bouttonAction == '*') {
    				resultatFinal = resultatCourant*valeurAffiché;
    				resultat = resultat.valueOf(resultatFinal);
    				parent.champAffichage.setText(resultat);
    			}
    			if(bouttonAction == '/') {
    				resultatFinal = resultatCourant/valeurAffiché;
    				resultat = resultat.valueOf(resultatFinal);
    				parent.champAffichage.setText(resultat);
    			}
     
    		}
     
    	}
     
    }
    Et enfin, les messages d'erreur:

    Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:994)
    at java.lang.Float.parseFloat(Float.java:422)
    at moteurCalcul.actionPerformed(moteurCalcul.java:25)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:6038)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5803)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4410)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    at java.awt.Window.dispatchEventImpl(Window.java:2429)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)


    Je ne vois vraiment pas ce qui ne va pas, siquelqu'un avait une idée, peut il m'en faire part^^?

    Merci d'avance

  4. #4
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    Dans ton moteurcalcul :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String texteChampAffichage = parent.champAffichage.getText(); //on retrouve le texte de l'afichage et on le met dans la variable
    float noteChampAffichage = Float.parseFloat(texteChampAffichage);
    texteChampAffichage est vide, il ne peut donc pas le parser en float !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 213
    Par défaut
    J'ai mit le parse dans le if(champAffichage = " ")

    Et ca ne marche toujours pas

    merci de ta rpeonse

  6. #6
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Pour tester si une chaine est vide il faut que tu fasse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(!champAffichage.equals(""))

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo