2011-03-12 3 views
3

J'ai un problème avec l'entrée de texte Java Swing. J'ai une méthode inputData() dans la classe A et quand je l'appelle, la méthode devrait attendre pendant que l'utilisateur remplissent TextField input dans la classe B et appuyez sur ENTRÉE. Enfin, la méthode inputData() doit avoir le texte que cet utilisateur a écrit. Comment pourrais-je le résoudre?Accès à Java Swing TextField d'une autre classe

class A { 
    B b = new B(); 
    public A() { 
     inputData(); 
    } 

    public char[] inputData() { 
     // there I would like to get text 
     // from TextField from class B 
    } 
} 

//------------------------------- 

class B extends JFrame{ 
    private JTexField input; 

    public B() { 
    } 

    private void inputKeyPressed(KeyEvent e) {         
     if (e.getKeyCode() == 10) { // pressed ENTER 
      input.getText() 
      input.setText(null); 
     } 
    } 
} 

Répondre

3

Vous ne voulez pas vraiment un JTextField. Il semble que vous attendiez une ligne d'entrée de l'utilisateur, qui devrait être un JOptionPane. Comment faire est décrit ici:

http://download.oracle.com/javase/tutorial/uiswing/components/dialog.html#input

Fondamentalement, JOptionPane.showInputDialog() provoquera une fenêtre pop-up qui contient un champ de texte des boutons et OK/Annuler, et si vous appuyez sur entrer prendra votre entrée. Cela élimine le besoin d'une autre classe.

Vous mettiez dans votre méthode donnéesEntrée():

inputData() 
{ 
    String input = JOptionPane.showInputDialog(...); 
    //input is whatever the user inputted 
} 

Si ce n'est pas ce que vous cherchez et que vous voulez un champ de texte qui reste ouvert, peut-être ce que vous voulez vraiment est un " Soumettre "à côté de votre JTextField qui permet à l'utilisateur de décider quand soumettre le texte. Dans ce cas, vous pourriez avoir:

class B extends JFrame 
{ 
    private A myA; 

    private JTextField input; 

    private JButton submitButton; 

    public B() 
    { 
     submitButton.addActionListener(new SubmitListener()); 
    } 

    private class SubmitListener 
    { 
     //this method is called every time the submitButton is clicked 
     public void actionPerformed(ActionEvent ae) 
     { 
      myA.sendInput(inputField.getText()); 
      //A will need a method sendInput(String) 
     } 
    } 
} 
+0

Bon point sur JOptionPane (1+). JDialog serait une autre option décente similaire. –

3

TextField? Puisque c'est un projet Swing, j'espère que vous voulez dire un JTextField, n'est-ce pas? Et ne lui ajoutez pas un KeyListener, mais plutôt un ActionListener car ceux-ci sont déclenchés lorsque l'utilisateur appuie sur Entrée. Une façon de résoudre votre problème est de donner à la classe GUI (ici appelée B) une méthode publique qui permettra aux classes extérieures d'ajouter un ActionListener au JTextField. Peut-être pouvez-vous l'appeler addActionListenerToInput (écouteur ActionListener). Alors la classe A peut ajouter l'écouteur à B, et le code actionPerformed sera appelé quand on appuie sur enter.

par exemple,

class A { 
    B b = new B(); 
    public A() { 
     //inputData(); 
     b.addActionListenerToInput(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      inputActionPerformed(e); 
     } 
     }); 
    } 

    private void inputActionPerformed(ActionEvent e) { 
     JTextField input = (JTextField) e.getSource(); 
     String text = input.getText(); 
     input.setText(""); 

     // do what you want with the text String here 
    } 
} 

//------------------------------- 

class B extends JFrame{ 
    private JTextField input; 

    public B() { 
    } 

    public void addActionListenerToInput(ActionListener listener) { 
     input.addActionListener(listener); 
    } 

} 
Questions connexes