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

avec Java Discussion :

Action au clic sur un bouton


Sujet :

avec Java

  1. #1
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut Action au clic sur un bouton
    Bonjour a tous,

    Alors voila je souhaiterais qu'au clic sur un boutton un text apparaisse ds un JLabel.Comme ds cette calculette.
    -exemple:Je clique sur le boutton 1 et 1 appare ds le JLabel.
    Nom : 396562.png
Affichages : 2665
Taille : 11,7 Ko
    Ce pendant j'arrive a lier une action lors du clic d'un bouton,sauf que j'arrive seulement a afficher le txt ds la console.Voici un exemple de mon code:

    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
    //Affichage de la zone de saisi
    	public void affichage(){
     
    		//Creation d'un JLabel
    		JLabel lab_Aff=new JLabel();
    		lab_Aff.setPreferredSize(new Dimension( 250, 30 ) );//dimension
    		Font police = new Font("Tahoma", Font.BOLD, 16);  //Apparence
    		lab_Aff.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));//bordure
    	    lab_Aff.setFont(police);
    		pan.add(lab_Aff, BorderLayout.NORTH);
    		lab_Aff.setText("");
     
    	}
              public void tableau01(){
              //Creation des boutons
    		JButton un = new JButton("1");
             //On definit une action a chaque bouton
    		un.addActionListener(new un_cListener());//c=chiffre
            //Ajout des boutons ss forme de tableau
    		pan_t01.add(un);
    }
            //Actions au moment du clic
    	public class un_cListener  implements ActionListener{
            public void actionPerformed(ActionEvent e) {
            	lab_Aff.setText("1");
            }
    	}
    Voila,merci de votre aide.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Si lab_Aff est bien le même JLabel (au sens la même instance) censé afficher le texte, je ne vois pas où est le problème.

    Bien sûr, pour le traitement global de l'affichage des chiffres tapés, tu vas voir qu'avec lab_Aff.setText("1"), tu vas vite être bloqué. Je passerais personnellement par un StringBuilder, pour stocker les différents chiffres tapés :
    • à chaque fois qu'un nouveau bouton de chiffre est appuyé, appeler stringBuilder.append( le chiffre tapé) ;
    • stringBuilder.toString() pour récupérer ce qui a été tapé (donc lab_aff.setText(stringBuilder.toString()) pour mettre à jour le JLabel
    • stringBuilder.setLength(0) pour réinitialiser...


    EDIT: je viens de voir que tu as modifé le code posté : dans ta méthode, JLabel lab_Aff=new JLabel() fait que le label créé est stocké dans une variable locale, alors que ta méthode affichage doit modifier un JLabel déclaré comme variable de classe. Il faut que ce soit la même instance de JLabel pour que ça fonctionne. Soit :

    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
    public class ... je sais pas quoi ...
    
    private JLabel lab_Aff; // variable de classe
    
    //Affichage de la zone de saisi
    	public void affichage(){
     
    		//Creation d'un JLabel
    		lab_Aff=new JLabel(); 
    ...
     
    	} 
            //Actions au moment du clic
    	public class un_cListener  implements ActionListener{
            public void actionPerformed(ActionEvent e) {
            	lab_Aff.setText("1");
            }
    	}
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Salut, si c'est simplement pour récupérer la valeur parmi plusieurs JButton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //On récupere la source
    JButton b = (JButton) e.getSource();
    lab_Aff.setText(leNomDeTonJButton.getText());
    Tout tes boutons devront faire appel à ce code qui se trouvera dans ton actionPerformed

    Dans ce cas dès que tu clic sur un boutton, ton JLabel sera à la bonne valeur.

  4. #4
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut Eclaircissement
    @Tt le monde pour que ca soit plus clair!

    Alors,voila qq éclaircissement:

    -"lab_Aff" = nom du JLabel ds lequel est ecrit un nombre au moment du clic sur le nombre.
    voici son code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //Affichage de la zone de saisi
    	public void affichage(){
     
    		//Creation d'un JLabel
    		JLabel lab_Aff=new JLabel();
    		lab_Aff.setPreferredSize(new Dimension( 250, 30 ) );//dimension
    		Font police = new Font("Tahoma", Font.BOLD, 16);  //Apparence
    		lab_Aff.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));//bordure
    	    lab_Aff.setFont(police);
    		pan.add(lab_Aff, BorderLayout.NORTH);
    		lab_Aff.setText("");
     
    	}
    -"tableau01"=nom de la methode qui cree,les touches de 0 a 9 ainsi que les touches "," et "=".
    --Dans la methode tableau01 j'ai donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Creation d'un nouveau JPanel pour les chiffres
    		JPanel pan_t01= new JPanel();
    pour la creation du JPanel qui contiendra les boutons
    --creation du bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Creation des boutons
    		JButton un = new JButton("1");
    --ajout d'une actio au bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //On definit une action a chaque bouton
    		un.addActionListener(new un_cListener());//c=chiffre
    --ajout du bouton au JPanel:
    -Définition de l'action pour le bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Actions au moment du clic
    	public class un_cListener  implements ActionListener{
            public void actionPerformed(ActionEvent e) {
            	lab_Aff.setText("1");
            }
    	}
    -Début du message d'erreur renvoye a l'execution:
    Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem:
    lab_Aff cannot be resolved

    at TP_calc_Fenetre$deux_cListener.actionPerformed(TP_calc_Fenetre.java:135)


    -Ce que me dit Eclipse(avec les petites ampoules):
    lab_Aff cannot be resolved


    Voila j'espere que maintenant tt est bien clair

  5. #5
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    @Joel Drigo//

    Ok j'ai compris ce que tu m'as dis,je vais essayer qq chose,merci de ton aide.

  6. #6
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    @Joel Drigo//
    C'est bon ca marche,mais maintenant,les chiffres s'ecrivent les un au dessus des autres ou bien remplace les autres au lieu de se placer a cote,mais bon la je vais chercher un petit peu
    En tt cas merci de ton aide super utile,sympa d'avoir un prof particulier

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Pif_Paf_Pouf Voir le message
    @Joel Drigo//
    C'est bon ca marche,mais maintenant,les chiffres s'ecrivent les un au dessus des autres au lieu de se placer a cote,mais bon la je vais chercher un petit peu
    En tt cas merci de ton aide super utile,sympa d'avoir un prof particulier
    C'est normal, avec l'appel de setText("1"), setText("2")... chaque String passé à chaque appel de setText() remplace la précédente. C'est pour ça que je t'ai parlé de StringBuilder... pour cumuler les différents chiffres dans une même String.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    @Joel Drigo//

    J'ai essaye "stringBuilder.append( le chiffre tapé) ;"et Eclipse me renvoit:"stringBuilder cannot be resolved or is not a field".
    Je vais chercher un peu pour resoudre le prb.

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il faut bien sûr créer une variable stringBuilder de classe StringBuilder, pour pouvoir l'utiliser (J'estimais ça évident...)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    salut
    as -tu essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class un_cListener  implements ActionListener{
            public void actionPerformed(ActionEvent e) {
               String str = ((JButton) e.getSource()).getText();
               if (!lab_Aff.getText().equals("0")) {
    					str = lab_Aff.getText() + str;
    				}
            	lab_Aff.setText(str);
            }
    	}
    eric

  11. #11
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    J'ai ete idiot j'ai pose la question trop vite,je pensais que "StringBuilder" etait un package a importer...dsl

  12. #12
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    C'est bon le probleme est resolu mes chiffres s'affichent correctement il ne me reste plus qu'a coder les operations.
    Je compte ouvrir:
    1-Ouvrir une nouvelle classe,ds laquelle je definirais une methode par operation
    2-utiliser "getText()"pour recuperer le txt ecrit dans le JLabel
    3-puis convertir son type "String" en "double"
    4-puis avec un autre "getText()" recuperer la donnée suivante
    5-effectuer l'operation entre ces 2 donnees
    6-Stocker le resultat dans une variable jusqu'a ce que l'utilisateur clique sur "="

    Par ex:
    Calcul que l'on souhaite effectuer: (1+3)*2
    1-l'utilisateur rentre "1+"
    2-"3" =>le resultat est de "4" pour l'instant et ce dernier est stocke ds une variable(notons la "X1")
    3-"*2"=>"X1"est appelee puis multiplie par "2"=>le resultat a change est "X1=8"
    4-"="=> la valeur de "X1" est appelee ,puis affichée.

    Est ce la bonne methode?

  13. #13
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    Salut,
    pour faire cette Operation ou toute autre operation , il faudra (pour ma part bien sur)
    - Une classe implementant les listeners par operation
    - Une classe qui sera a l´ecoute des chiffres appuyés
    - utiliser "getText()"pour recuperer le txt a ecrire dans le JLabel
    - si tu cliques sur operateur, il faut le memoriser et au prochain clic sur l´operateur et stocker la valeur converti en double dans une variable X1
    - prendre la prochaine valeur
    - Actualiser l´ecran
    - effectuer l'operation entre X1 et la valeur actuel sur l´ecran avec l´operateur socker auparavant
    - ainsi de suite


    Eric

  14. #14
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Pour une calculatrice sans mémoire, j'utiliserais tout simple 3 variables :

    • Un StringBuilder
    • Une variable pour l'opérande/résultat, mettons valeur de type Double
    • Une variable pour l'opérateur en attente du nouvel opérande, op, mettons une enum Operateur { PLUS, MOINS, MULTIPLIER, DIVISER, EGAL }


    L'algo est grossièrement le suivant :

    valeur est initialisée à null, et op à Operateur.EGAL

    • chaque fois qu'on appuie sur un chiffre, ou la virgule (si elle n'est pas déjà dans la saisie, forcément), "ajouter" (append) ce chiffre au StringBuilder, et on met à jour le JLabel
    • chaque fois qu'on appuie sur un opérateur (+, -, ×, / ou =),
      • On convertit en double stringBuilder.toString() dans tempValeur
      • Si valeur==null, ou op==Operateur.EGAL, valeur = tempValeur et on stocke l'opérateur (la variable de type enum) dans op
    • Sinon (Donc si valeur!=null)
      • si op == Operateur.PLUS, alors valeur += tempValeur
      • si op == Operateur.MOINS, alors ...
      • ...
    • et on met à jour le JLabel avec valeur (formatée)
    • et on stocke l'opérateur dans op (ainsi on peut faire n1 + n2 + n3, ou ( n1 + n2 ) * n3
    [*]chaque fois qu'on appuie sur C, on mets null dans valeur, et on reset le StringBuilder (setLength(0)), et op=Operateur.EGAL, et on met à jour le JLabel [/LIST]

    Tu peux gérer le = à part si tu penses que c'est plus simple (avec une méthode chargé de la conversion/stockage de stringBuilder.toString(), ça ne fait pas beaucoup de code redondant.

    Pour gérer les parenthèses quelconques (genre 3 * ( 4 + 5), parce que l'algo précédent calculera (3 * 4 ) + 5), il faut gérer soit la mémoire (genre touche M+ des calculatrices), soit les parenthèses (des touches parenthèses) : dans ce cas, le plus simple est d'utiliser une Stack ( '(' fait un push, ')' ou '=' un pop suivi d'un calc(peek()), et tout autre opérateur faire un calc(peek()), en gros).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  15. #15
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    @Joel Driggo//

    Je n'est pas super bien compris ce que tu m'as dis pour ma part voila comment j'ai commence:
    J'ai bien utilise un string builder comme tu me l'as dis.
    Je vais prendre pour exemple les operations.

    classe fenetre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TP_calc_calcul F_ope=new TP_calc_calcul();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Pour les Operations
    	public void tableau02(){
    JButton addition = new JButton("+");
    addition.addActionListener(new addi_oListener());
    pan_t02.add(addition);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class addi_oListener  implements ActionListener{
            public void actionPerformed(ActionEvent e) {
            	stringBuilder.setLength(0);//remet tt a zero
            	lab_Aff.setText("+");
            	F_ope.F_addi();
            }
    voici ma classe calcul:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //Variable general utile
    	TP_calc_Fenetre TP_fen=new TP_calc_Fenetre();
     
    	//Operations
     
    	//additions
    	public void F_addi(){
    		//var
    		Object X1;
    		double X2;
    		X1=TP_fen.lab_Aff.getText();
    		X2=(double)X1;//converstion
    	}

  16. #16
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class addi_oListener  implements ActionListener{
            public void actionPerformed(ActionEvent e) {
            	stringBuilder.setLength(0);//remet tt a zero
            	lab_Aff.setText("+");
            	F_ope.F_addi();
            }
    La tu remets à zéro le StringBuilder lorsqu'on appuie sur +, mais sans rien faire avant avec la valeur stockée dans le StringBuilder : il faut bien sûr la stocker quelque part pour pouvoir l'utiliser (ce que je proposais dans mon algo avec la variable valeur.
    En fait, tout opérateur (+, - ou =) se comporte comme une action de validation au moins, suivi d'éventuellement un calcul : l'appui sur '4', '2', '+', '3', '3', '=' se décompose ainsi :

    • appui '4' : stringBuilder.append('4') : le StringBuilder contient "4", valeur contient null, op contient Operateur.EGAL
    • appui '2' : stringBuilder.append('2') : le StringBuilder contient "42", valeur contient null, op contient Operateur.EGAL
    • appui '+' : valeur == null, donc valeur = Double.valueOf(stringBuilder.toString()), puis stringBuilder.setLength(0), et op devient '+'
      le StringBuilder contient "", valeur contient 42, op contient Operateur.PLUS
    • appui '3' : stringBuilder.append('3') : le StringBuilder contient "3", valeur contient 42, op contient Operateur.PLUS
    • appui '3' : stringBuilder.append('3') : le StringBuilder contient "33", valeur contient 42, op contient Operateur.PLUS
    • appui '=' : valeur != null (puisque 42) et op==Operateur.PLUS, donc valeur += Double.valueOf(stringBuilder.toString()), puis stringBuilder.setLength(0), op devient '='
      le StringBuilder contient "", valeur contient 75, op contient Operateur.EGAL



    l
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  17. #17
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    Le truc qui est lourd c'est qu'apres il faut gerer les thread,j'ai essaye comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class addi_oListener  implements ActionListener{
            public void actionPerformed(ActionEvent e) {
            	stringBuilder.setLength(0);//remet tt a zero
            	lab_Aff.setText("+");
            	t = new Thread(new PlayAnimation());
            	t.start();
     
            }
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class PlayAnimation implements Runnable{
    	    public void run() {
    	      F_ope.F_addi();
    	    }               
    	  }
    Mais ca ne marche toujours pas.

  18. #18
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Hum, je ne sais pas où tu veux mettre des threads là-dedans, mais commences déjà par faire marcher la calculatrice sans (je dirais même commences par la faire fonctionner sans UI graphique, ce que permet mon algo).
    Ensuite, tu pourras ajouter des threads...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  19. #19
    Membre actif
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Points : 204
    Points
    204
    Par défaut
    Ok Joel,
    C'etait parceque mm si JAVA ne me renvoyait aucune erreur ds eclipse au lancement,j'avais:

    Exception in thread "main" java.lang.StackOverflowError
    at java.util.HashMap.getEntry(Unknown Source)
    at java.util.HashMap.get(Unknown Source)
    at sun.awt.AppContext.get(Unknown Source)
    at com.sun.java.swing.SwingUtilities3.getDelegateRepaintManager(Unknown Source)
    at javax.swing.RepaintManager.getDelegate(Unknown Source)
    at javax.swing.RepaintManager.addDirtyRegion(Unknown Source)
    at javax.swing.JComponent.repaint(Unknown Source)
    at java.awt.Component.repaint(Unknown Source)
    at javax.swing.JComponent.setBackground(Unknown Source)
    at javax.swing.LookAndFeel.installColors(Unknown Source)
    at javax.swing.LookAndFeel.installColorsAndFont(Unknown Source)
    at javax.swing.plaf.basic.BasicPanelUI.installDefaults(Unknown Source)
    at javax.swing.plaf.basic.BasicPanelUI.installUI(Unknown Source)
    at javax.swing.JComponent.setUI(Unknown Source)
    at javax.swing.JPanel.setUI(Unknown Source)
    at javax.swing.JPanel.updateUI(Unknown Source)
    at javax.swing.JPanel.<init>(Unknown Source)
    at javax.swing.JPanel.<init>(Unknown Source)
    at javax.swing.JPanel.<init>(Unknown Source)
    at javax.swing.JRootPane.createGlassPane(Unknown Source)
    at javax.swing.JRootPane.<init>(Unknown Source)
    at javax.swing.JFrame.createRootPane(Unknown Source)
    at javax.swing.JFrame.frameInit(Unknown Source)
    at javax.swing.JFrame.<init>(Unknown Source)
    at TP_calc_Fenetre.<init>(TP_calc_Fenetre.java:28)
    at TP_calc_calcul.<init>(TP_calc_calcul.java:21)
    at TP_calc_Fenetre.<init>(TP_calc_Fenetre.java:25)
    at TP_calc_calcul.<init>(TP_calc_calcul.java:21)

    ...ETC...


    Mais je vais suivre tes conseils et faire sans.

  20. #20
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Tu peux dire que tu as ajouté des threads parce que tu avais cette exception ?

    Regardes plutôt le code correspondant aux lignes indiquées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    at TP_calc_Fenetre.<init>(TP_calc_Fenetre.java:28)
    at TP_calc_calcul.<init>(TP_calc_calcul.java:21)
    at TP_calc_Fenetre.<init>(TP_calc_Fenetre.java:25)
    at TP_calc_calcul.<init>(TP_calc_calcul.java:21)
    Il doit y avoir quelquechose dans l'initialisation de ta fenêtre qui pose problème par rapport au fonctionnement dans SWING (peut être parce que tu affiches ta fenêtre avant qu'elle soit prête, et ensuite tu ajoutes des composants (comme vu dans un post précédent, il me semble). Dans ce cas, c'est effectivement un problème de thread, mais pas de thread perso, de thread SWING : il ne faut pas modifier un composant SWING pendant qu'il s'affiche. En général, lorsqu'on créé une fenêtre dans le main() du programme, on prépare tout, puis on affiche. Mais, si on fait des choses dans le mauvais ordre, on peut avoir ce problème : pour garantir de ne pas l'avoir, tu peux dans ta méthode main() invoquer le code de construction de ta fenêtre dans le thread de SWING, ce qui garantira que tout ce que tu y fais (dans la construction de ta frame) sera dans un seul thread (celui de SWING), donc sans possibilité de concurrence avec le thread de SWING qui essayerait d'afficher la fenêtre.

    Exemple :

    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
    public class MonProgram {
     
        public static void main(Strng[] args) {
     
            SwingUtilities.invokeLater(new Runnable() {
     
    			@Override
    			public void run() {
    				createFrame();
    			}
    		});
     
    	}
    	private static void createFrame() {
                  // et là tu mets ton code qui doit s'exécuter sur l'EDT (le thread de SWING)
     
            }
     
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Aucune action après Clic sur un bouton
    Par amacz dans le forum WinRT
    Réponses: 1
    Dernier message: 14/01/2015, 09h00
  2. Formulaire, action "submit" directe après clic sur un bouton radio
    Par eLynx dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/10/2009, 19h29
  3. Y-a-t'il une action avant le clic sur un bouton ?
    Par beegees dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 04/01/2009, 20h30
  4. pb sur le premier clic sur un bouton
    Par corwin44 dans le forum Access
    Réponses: 6
    Dernier message: 28/10/2005, 09h51
  5. Gérer les clics sur les boutons
    Par cyberlewis dans le forum Windows
    Réponses: 4
    Dernier message: 08/02/2004, 15h34

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