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 :

Fermer et Retourner une valeur par clic sur bouton


Sujet :

avec Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Fermer et Retourner une valeur par clic sur bouton
    Je souhaite pouvoir utiliser dans mes programmes une fenetre qui ressemble à un pavé numérique. Quand l'utilisateur doit effectuer une saisie, la fenetre pavenumérique s'ouvre et retourne à la méthode qui l'appelle la valeur de ce qui a été affiché dans le champ d'affichage du pavé numérique. (l'interet pour moi serait de construire plusieurs "pavés numériques" qui ne contiennent que les valeurs que l'utilisateur peut saisir...).

    J'ai réussi à créer la fenetre du pavenumérique, et de gérer les actions des clics sur les boutons à l'INTERIEUR de la classe Pavenum.

    Ma classe Pavenum se présente ainsi :
    - import des classes javax.swing et java.awt nécessaires
    - definition de la classe : public class Pavenum extends JFrame{
    - initialisation des boutons du pavé : private JButton boutinfo = new JButton();private JButton bout7 = new JButton();....
    - je définis une méthode Pavenum() : public Pavenum(){
    - definition de la fenetre et de la disposition : this.setTitle("Pavé Numérique");this.setLayout(new GridBagLayout());...
    - pour chaque bouton, je paramètre les attributs, l'ajoute au panel et définit à quel listener il se rattache par exemple touche "7":
    bout7 = new JButton("7");c.ipady=40;c.ipadx=40; c.fill=GridBagConstraints.HORIZONTAL;c.gridx=0;c.gridy=3;c.gridwidth=1;bout7.setFont(chiffre); bout7.addActionListener(new ChiffreListen()); this.getContentPane().add(bout7,c);
    - enfin, dans ma classe Pavenum, je définis les méthodes des listener exemple pour un bouton chiffre: public class ChiffreListen implements ActionListener { public void actionPerformed(ActionEvent even) { String str = affsaisie.getText(); String str2 = affsaisie.getText() + ((JButton)even.getSource()).getText(); affsaisie.setText(str2);

    Tout fonctionne bien, la chaine deS caractéres saisis en cliquant sur les différents boutons est affichée dans la fenetre... et j'ai donc un JTextfield qui contient la chaine de caractères qui a été saisie.
    MAIS ce qui m'intéresse dans ce pavé numérique c'est que :
    1° il se ferme pour revenir à un autre écran, quand l'utilisateur clique sur bouton Entrée.
    2° qu'à ce moment il RETOURNE LA VALEUR CONTENUE dans le JTextfield du Pavenum au programme principal.

    J'arrive à fermer le pavé en insérant System.exit(0) dans la méthode ActionListener de la touche Entrée. MAIS je perds le contenu de la chaine saisie.
    Le mot clé RETURN ne fait pas sortir de Pavenum mais simplement du listener.

    Ma classe principale est écrite ainsi, et je pensais pouvoir récupérer dans l'objet pave1 la valeur de la chaine saisie... mais non!!!
    public class Saisie
    public static void main(String[] args) {
    { Pavenum pave1 = new Pavenum();
    System.out.println(pave1);

    Merci de votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Voici comment j'aurais fait :

    1 Seul programme.

    Une classe PaveNumerique qui étend JDialog
    - owner = La fenêtre qui l'ouvre
    - modal = true
    - Une méthode getValue() qui retourne ce qui a été saisie par l'utilisateur.
    - Le bouton de fermeture, pas de System.exit() mais un appel à dispose()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    JButton button  = new JButton("Fermer");
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            dispose();  // Méthode dispose du JDialog parent dans mon cas
        }
    });

    Dans le programme parent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PaveNumerique pave = new PaveNumerique();
    pave.setVisible(true); // Ce programme va bloquer ici tant que la fenêtre du pave numerique sera ouverte
    String ceQuiAEteTape = pave.getValue();

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 3
    Points : 2
    Points
    2
    Par défaut get value (de quoi?)
    Merci pour ta réponse. Cela me parait bien correspondre au probleme (arret du programme appelant tant que la fenetre pavenum n'est pas fermée).
    Etant débutant en java, tu vas surement trouvé mes deux questions un peu betes :
    - comment indiques-tu que dans la ligne du programme parent String ceQuiAEteTape = pave.getValue(); la valeur à capturer est celle du JTextfield du pavenum qui contient la chaine saisie par l'utilisateur avant de cliquer sur le bouton Fermer ? Tu définis une méthode dans la methode Pavenum?

    - quel est le sens de la ligne @Override ?

    Merci

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 13
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Eh bien dans ta classe PaveNumerique, tu rajoutes une méthode de façon à récupérer la valeur de ton JTextField :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public String getValue(){
        return MonJTextField.getText();
    }
    Ce qui te permet donc d'appeler cette méthode sur ton objet PaveNumerique.

    La ligne @Override, est une annotation de java pour signaler qu'une méthode a été redéfinie.

    En esperant t'aider,
    Cordialement,

    Azramis

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    A noter que l'annotation @Override sur l'implémentation d'une interface n'est valide que depuis Java 6 et +.
    Si t'es en java 5 ou - tu peux l'enlever. Ça ne change rien.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Ca marche !!!
    Merci pour ces complements... Du coup j'arrive à faire ce
    que je veux :
    à savoir un programme principal qui ouvre la fenetre du pavenumerique;
    lorsque l'utilisateur clique sur la touche entrée du pavé, la fenetre se ferme et la valeur du champ JTextfield qui contient la valeur saisie est transférée au programme appelant.

    Modifications dans la class pavenum :

    - L'ActionListener du bouton Entree contient la methode dispose() qui ferme donc la fenetre (au lieu de la methode System.exit() ...)

    - J'ai inséré dans pavenum une méthode
    public static String getChainesaisie(){
    return affsaisie.getText();
    qui retourne le contenu de la chaine saisie.

    Dans le programme appelant, j'ai créé une boucle
    while (pave1.isDisplayable()){
    chainepave=Pavenumcopie.getChainesaisie();}
    qui tourne donc tant que la fenetre pavenum est ouverte et qui à chaque tour preleve la valeur de la chaine saisie dans la fenetre Pavenum en utilisant la methode getChainesaisie du pavenum.
    Le programme appelant reste donc dans la boucle tant que le bouton
    entree de pavenum n'a pas été cliqué et donc que la fentre est "displayable".
    Quand l'utilisateur clique sur Entree dans pavenum,
    la condition Pave1.isDisplayable() devient false et la boucle s'interrompt. (ouf!) La valeur de la chaine est deja inscrite dans le programme appelant.

    Merci de votre aide
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Retourner une valeur par la form appelée ?
    Par krilas dans le forum Forms
    Réponses: 3
    Dernier message: 02/12/2012, 14h04
  2. Retourner une valeur par défaut si valeur non existante
    Par BakaOnigiri dans le forum Langage SQL
    Réponses: 14
    Dernier message: 28/01/2011, 15h56
  3. Afficher/Masquer une vidéo par clic sur lien
    Par spoker04 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/05/2010, 10h44
  4. [XSD] definire une valeur par defaut sur le xsd
    Par vanesa dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 25/04/2008, 19h39
  5. retourner la valeur du clic sur un msgBoxStyle
    Par islamune9 dans le forum VB.NET
    Réponses: 16
    Dernier message: 11/05/2007, 13h02

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