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 :

Problème d'accès à une variable


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Problème d'accès à une variable
    Bonjour !
    Mon problème est le suivant.
    Je créer un KeyListener sur un bouton que je créer à la chaine a partir d'une lecture XML.
    Mais je n'arrive pas à partir du KeyAdapter à accéder à la variable de ce bouton!
    Je m'explique avec du code, ce sera plus simple:

    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
     
    	private void initialize() {
    		frame = new JFrame();
     
    		frame.setBounds(100, 100, 283, 418);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.getContentPane().setLayout(new GridLayout(4, 1, 5, 5));
    		for (Map.Entry<String, String> entry : config.getMapConfig().entrySet()) {
    			JPanel tPanel = new JPanel();
    			frame.getContentPane().add(tPanel);
    			tPanel.setLayout(new GridLayout(0, 2, 5, 5));
     
    			JLabel tLabel = new JLabel(entry.getKey());
    			tPanel.add(tLabel);
     
    			JTextField tTextField = new JTextField();
    			tTextField.setText(entry.getValue());
    			tPanel.add(tTextField);
    			tTextField.setColumns(10);
    			tTextField.addKeyListener(new KeyAdapter() {
    				@Override
    				public void keyReleased(KeyEvent arg0) {
    					System.out.println("COUCOU");
    				}
    			});
    		}
    		frame.setVisible(true);
    	}
    Ce que je veux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    			JTextField tTextField = new JTextField();
    			tTextField.setText(entry.getValue());
    			tPanel.add(tTextField);
    			tTextField.setColumns(10);
    			tTextField.addKeyListener(new KeyAdapter() {
    				@Override
    				public void keyReleased(KeyEvent arg0) {
    					System.out.println(tTextField.getText());
    				}
    			});
    Donc voilà, comment récupérer le tTextField.getText() depuis ce KeyAdapter ?
    La seule solution est de faire un Field et de faire un ConfigUI.this.field_tTextField.getText() ?
    Ou une solution plus "courte" ou ingénieuse est possible ?

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par thebossbest Voir le message
    Ou une solution plus "courte" ou ingénieuse est possible ?
    Rendre cette variable final.

    En principe une variable déclarée dans une méthode (ce qu'on appelle une variable locale,) n'a de sens que pendant l'exécution de cette méthode. Comme un objet (ici le KeyAdapter) va être appelé complètement à un autre moment que pendant l'exécution de cette méthode, les variables locales n'y ont donc pas de sens, et on ne peut pas s'en servir.

    Mais si la variable est final, ce qu'elle représente est gravé pour l'éternité, et garde son sens pour toujours. Les objets peuvent donc s'en servir, la variable disparaîtra avec le dernier objet qui s'en servait.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Points : 639
    Points
    639
    Par défaut
    EDIT : La solution de thelvin est meilleure...

    Bonjour,

    Une solution qui n'est probablement pas la seule. Créer une classe interne (ou non c'est à toi de voir si tu veux la réutiliser dans plusieurs classes) :

    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
    public class KeyAdapterJTextComponent extends KeyAdapter
        {
     
            private JTextComponent tTextField;
     
            /**
             * Constructeur de la classe UtileSiren.java
             */
            public KeyAdapterJTextComponent(JTextComponent tTextField)
            {
                this.tTextField = tTextField;
            }
     
            /**
             * (methode de remplacement) {@inheritDoc}
             * 
             * @see java.awt.event.KeyAdapter#keyReleased(java.awt.event.KeyEvent)
             */
            @Override
            public void keyReleased(KeyEvent e)
            {
                System.out.println(tTextField.getText());
            }
        }
    Dans ton code ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tTextField.addKeyListener(new KeyAdapterJTextComponent(tTextField))
    Romain.

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Merci pour les solutions, j'ai testé les deux et ça marche bien.
    Pour la première j'avais peur que le fait que ce soit final soit un problème, mais en fait pas du tout !
    La seconde solution marche bien et ne me pose pas de problèmes au niveau des relations de classe.
    Merci pour ces réponses rapides

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

Discussions similaires

  1. Problème d'accès à une variable partagée
    Par sebac dans le forum Général Java
    Réponses: 1
    Dernier message: 04/09/2009, 12h11
  2. Problème d'accés à une variable
    Par debo41 dans le forum Flex
    Réponses: 15
    Dernier message: 21/08/2008, 11h36
  3. [C#] Problème d'accès à une variable depuis une popup
    Par LE NEINDRE dans le forum ASP.NET
    Réponses: 2
    Dernier message: 03/01/2007, 15h30
  4. [POO] Problème d'accès à une variable privée
    Par Nadd dans le forum Langage
    Réponses: 8
    Dernier message: 17/09/2006, 21h43
  5. Problème d'accès à une variable
    Par khaled.mtibaa dans le forum Langage
    Réponses: 3
    Dernier message: 20/04/2006, 11h39

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