2017-09-20 2 views
1

Je suis nouveau sur java et j'ai le problème suivant: J'ai ajouté un ActionListener à un bouton et je veux accéder à un numéro à partir de celui-ci, mais cela ne fonctionne pas comme je l'ai fait. J'ai cherché, mais je n'ai pas trouvé de réponse. Le code ressemble à ceci maintenant:Comment puis-je obtenir un Integer à partir d'un ActionListener?

public class example extends JPanel{ 

    int text; 

    public example(){ 

     JButton button = new JButton("x"); 
     JTextField textField = new JTextField(); 

     add(textField); 
     add(button); 

     ActionListener al = new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent event) { 
       text = Integer.parseInt(textField.getText()); 
      } 
     } 

     button.addActionListener(al); 
     system.out.println(text); 
    } 
} 

Répondre

2

problème est avec votre logique. Vous avez ajouté l'ActionListener au bouton. Par conséquent, chaque fois que vous appuyez sur le bouton, la valeur de text est la valeur de textField. Mais la valeur initiale de le texte est nulle. Dans votre code, après l'ajout de ActionListener, la valeur du texte est imprimée. Vous pouvez modifier votre ActionListener comme ceci:

ActionListener al = new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent event) { 
     text = textField.getText(); 
     someFun(); 
     system.out.println(text); 
    } 
} 

Pour obtenir entier de chaîne, utilisez Integer.parseInt() fonction:

void someFun() { 
    int num = Integer.parseInt(text); 
    ... // Do whatever you want to do 
} 
+0

Le problème est avec la logique. – Dungnbhut

+0

Oui, cela fonctionne, mais comment puis-je obtenir l'entier en dehors de l'ActionListener? – Andy

+0

Vérifiez les modifications. Je pense que vous devriez jeter un oeil à la base de Java – npk

0

Vous devez déclarer les variables de texte comme définitif en haut de l'auditeur d'action.

public class example extends JPanel{ 

final String text; 

public example(){ 

    JButton button = new JButton("x"); 
    JTextField textField = new JTextField(); 

    add(textField); 
    add(button); 

    ActionListener al = new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent event) { 
      text = textField.getText(); 
     } 
    } 

    button.addActionListener(al); 
    system.out.println(text); 
} 

}

+0

qui ne fonctionne pas. Eclipse veut supprimer le ** "final" ** ... Y at-il un moyen de contourner? – Andy