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

Interfaces Graphiques en Java Discussion :

Incrémentation / Décrémentation


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Février 2015
    Messages : 66
    Points : 63
    Points
    63
    Par défaut Incrémentation / Décrémentation
    Bonjour,

    Je travaille sur un projet de logiciel, et je rencontre un problème.
    J'ai créé cette fenêtre, et je cherche à Incrémenter et décrémenter la première box en appuyant sur la flèche du haut pour ++ et la flèche du bas pour -- .

    Nom : Capture.PNG
Affichages : 2246
Taille : 6,4 Ko

    j'ai créé ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    button211.addMouseListener(new MouseAdapter(){
    	    		public int b = 0;
    	    		public void mouseDown(MouseEvent e) {
    	    			b++;
    	    			text21.setText(""+b);
    	    		}
    	    	});
    qui fonctionne pour l'incrémentation. Mais je ne vois pas comment récupérer la variable "b" afin de l'utiliser pour la décrémentation.


    Voila ce que j'ai essayé de faire, sans succès.

    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
    if (button211 != null) {
    	    	button211.addMouseListener(new MouseAdapter(){
    	    		public int b = 0;
    	    		public void mouseDown(MouseEvent e) {
    	    			b++;
    	    			text21.setText(""+b);
    	    		}
    	    	});
    	    }
     
    	    if (button212 != null) {
    	    	button212.addMouseListener(new MouseAdapter(){
    	    		public void mouseDown(MouseEvent e) {
    	    			b--;
    	    			text21.setText(""+b);
    	    		}
    	    	});
    	    }
    Si vous avez une piste de réflexion à me faire parvenir, j'accepte volontiers !

    Cordialement

  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,

    1. A priori ton interface est sous SWING, donc tu peux utiliser un JSpinner qui fera tout ça tout seul
    2. Pour traiter les actions sur un bouton, on utilise plutôt un ActionListener qu'un MouseListener. Que cela soit pour un MouseListener ou pour un ActionListener, il faut utiliser la même variable b :

      • avec un type primitif, utilise qu'une seule instance d'écouteur, que tu enregistres sur les 2 boutons. Avec un actionListener, tu peux utiliser la commande pour différencier les boutons :

        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
        		JButton buttonPlus = new JButton();
        		buttonPlus.setActionCommand("+");
        		JButton buttonMoins = new JButton();
        		buttonMoins.setActionCommand("-");
        		ActionListener actionListener = new ActionListener() {
         
        			private int b;
         
        			@Override
        			public void actionPerformed(ActionEvent e) {
        				switch (e.getActionCommand()) {
        				case "+":
        					b++;
        					break;
         
        				case "-":
        					b--;
        					break;
        				default:
        					break;
        				}
        			}
         
        		};
        		buttonPlus.addActionListener(actionListener);
        		buttonMoins.addActionListener(actionListener);

      • soit tu utilises une instance de classe qui a une variable int (un wrapper mutable), l'instance de cette classe n'étant pas obligée d'être locale au listener, si celui-ci est interne à la classe/méthode qui déclare la variable.
      • soit tu utilises éventuellement un wrapper mutable standard, comme AtomicInteger
    3. Problème, si le champ est un JTextField, on peut saisir dedans, et comme b ne prend pas la valeur de ce champ, les boutons ne fonctionne pas correctement. Donc soit il faut mettre à jour b chaque fois qu'on change une valeur dans le JTextField, avec un écouteur supplémentaire et surtout l'obligation d'avoir une classe à part pour l'ActionListener, pour modifier la variable b. Soit on récupère la valeur directement dans le champ à chaque fois :
      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
      		final JTextField field = new JTextField();
      		JButton buttonPlus = new JButton();
      		buttonPlus.setActionCommand("+");
      		JButton buttonMoins = new JButton();
      		buttonMoins.setActionCommand("-");
      		ActionListener actionListener = new ActionListener() {
       
      			@Override
      			public void actionPerformed(ActionEvent e) {
      				switch (e.getActionCommand()) {
      				case "+":
      					setFieldValue(getFieldValue()+1);
      					break;
      				case "-":
      					setFieldValue(getFieldValue()-1);
      					break;
      				default:
      					break;
      				}
      			}
       
      			private void setFieldValue(int value) {
      				field.setText(String.valueOf(value));
      			}
       
      			private int getFieldValue() {
      				return Integer.parseInt(field.getText());
      			}
       
      		};
      		buttonPlus.addActionListener(actionListener);
      		buttonMoins.addActionListener(actionListener);
    4. Mais c'est quand même bien plus simple d'utiliser un JSpinner, plutôt que de réinventer la roue. D'autant plus que là, on a encore beaucoup de chose à faire (dans un JTextField on peut saisir n'importe quoi, des lettres, une chaine vide, etc... donc il faudrait ajouter des tests pour éviter les exceptions dans ce cas. On peut vouloir avoir des bornes pour la valeur saisie, etc.
    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 du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Février 2015
    Messages : 66
    Points : 63
    Points
    63
    Par défaut
    Je vais essayer ça, je vous tiens au courant.

    PS : c'est une interface SWT

  4. #4
    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
    En SWT, le composant s'appelle Spinner.

    Et pour écouter les boutons, au lieu de ActionListener de SWING, il faut utiliser SelectionListener. Par contre, il n'y a pas de commande, mais tu peux utiliser le "data" du composant (ce qui est quelque part bien plus puissant, parce que moins limité).

    Par 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
     
    Button buttonPlus = new Button(parent, SWT.ARROW|SWT.UP);
    buttonPlus.setData("command", "+");
    Button buttonMoins = new Button(parent, SWT.ARROW|SWT.DOWN);
    buttonMoins.setData("command", "-");
    SelectionListener selectionListener = new SelectionAdapter() {
     
        public void widgetSelected(SelectionEvent e) {
            switch( (String)e.item.getData("command") ) {
                 case "+":
                     break;
                 case "-";
                     break;
            }
        }
     
    };
    buttonPlus.addSelectionListener(selectionListener);
    buttonMoins.addSelectionListener(selectionListener);
    On pourrait aussi faire par exemple, aussi :


    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
     
    Text text=...;
    Button buttonPlus = new Button(parent, SWT.ARROW|SWT.UP);
    buttonPlus.setData("command", "+");
    buttonPlus.setData("text", text);
    Button buttonMoins = new Button(parent, SWT.ARROW|SWT.DOWN);
    buttonMoins.setData("command", "-");
    buttonMoins.setData("text", text);
    SelectionListener selectionListener = new SelectionAdapter() {
     
        public void widgetSelected(SelectionEvent e) {
            Text text = (Text)e.item.getData("text");
            switch( (String)e.item.getData("command") ) {
                 case "+":
                     ...
                     break;
                 case "-";
                     ...
                     break;
            }
        }
     
    };
    buttonPlus.addSelectionListener(selectionListener);
    buttonMoins.addSelectionListener(selectionListener);
    Dans le 2 cas, on pourrait utiliser une classe unique qui étend SelectionAdapter, pour mettre une instance de cette classe sur chaque triplet text/buttons.
    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.

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Février 2015
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Février 2015
    Messages : 66
    Points : 63
    Points
    63
    Par défaut
    J'ai réalisé la fonction avec Spinner.

    Merci beaucoup !

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/12/2011, 10h44
  2. [AC-2003] Décrémentation multiple suivi d'une incrémentation simple
    Par LizzyTSO dans le forum Access
    Réponses: 4
    Dernier message: 05/08/2010, 14h30
  3. Incrémentation / Décrémentation champs text
    Par magicpetro dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 03/03/2009, 16h20
  4. Réponses: 13
    Dernier message: 19/08/2008, 17h41
  5. incrémentation ,décrémentation
    Par BECHE dans le forum Langage
    Réponses: 6
    Dernier message: 07/12/2005, 00h03

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