2010-03-15 6 views
0

Je travaille sur un projet Java et j'ai besoin d'avoir une touche pour simuler un clic sur un JTextField. Ce que je cherche est l'équivalent de la méthode JButton doClick().Comment simuler un clic sur un JTextField? L'équivalent de JButton doClick()?

J'essaye d'avoir le keypress "entrent" exécutent exactement la même fonction qu'un clic sur le JTextField.

Vous ne savez pas quelle autre information fournir. Merci d'avance.

+0

Lorsque vous cliquez sur un champ de texte, le curseur est positionné sur le caractère sur lequel vous avez cliqué. Donc, avoir "Entrer faire exactement la même chose n'a aucun sens, puisque nous ne savons pas quel personnage vous voulez faire semblant que vous avez cliqué dessus." Puisque vous ne pouvez pas décrire votre exigence, publiez un SSCCE: http: // sscce. – camickr

Répondre

2

OK, merci pour l'aide. Je suppose que je n'étais pas clair, mais j'ai maintenant trouvé un moyen de faire fonctionner mon code grâce à certaines de vos idées.

J'avais déjà pensé à créer une méthode privée appelée par les deux fonctions, mais une partie du code doit savoir sur quel JTextField l'utilisateur est cliqué. J'ai découvert .getFocusOwner(), ce qui me permet de référencer l'élément en cours avec Focus (le JTextField). Quelque chose comme ça

public void keyPressed(KeyEvent e) { 
     if(e.getKeyCode()==KeyEvent.VK_ENTER) { 
      Object which = JFrame.getFocusOwner();     
      if(which.getClass() == JTextField.class) 
       foo(which); 
     } 
    } 

    public void mouseClicked(MouseEvent e) {     
     Object which = e.getSource(); 
     if(which.getClass()== JTextField.class) { 
      foo(which); 
     } 
    } 

Il y avait probablement une meilleure façon de le faire, mais au fond j'avais un tableau de JTextFields et le programme fonctionnait correctement lorsque les utilisateurs ont cliqué sur la prochaine JTextField, mais lorsque vous appuyez sur entrer, je ne l'ai pas savoir comment appeler le JTextField qui vient d'être saisi alors j'ai voulu simuler un clic sur le JTextField (qui appelle la mise au point). Je suppose que je devrais avoir expliqué tout mon problème.

Merci.

2
public void simulateKey(KeyEvent e, Component c) { 
    Field f = KeyEvent.class.getField("focusManagerIsDispatching"); 
    f.setAccessible(true); 
    f.set(e, Boolean.TRUE); 
    c.dispatchEvent(e); 
} 

Envoyer un "Enter" à votre JTextField. Cela a été volé de here.

+0

J'ai besoin d'une pression sur une touche pour simuler un clic de souris, pas seulement pour simuler une pression sur une touche, je veux que la touche appelle la fonction du clic de souris. Ce que je veux, c'est que lorsque l'utilisateur appuie sur Entrée, il appelle le même code que lorsqu'il clique n'importe où dans le cadre. – Vox

0

Ce que je veux est lorsque l'utilisateur appuie entrer, il appelle le même code que lorsque ils cliquent partout dans le cadre

encore n'a pas de sens pour moi.

Lorsque l'utilisateur clique sur un ou sur le cadre deux choses se produisent:

a) le champ de texte perd le focus

b) d'autres gains de composants se concentrent

Vous pouvez ajouter un ActionListener au champ de texte. L'ActionListener est appelée lorsque la touche Entrée est enfoncée. Mais alors comment deviner où sur le cadre pour générer un clic de souris? On dirait une logique aléatoire pour moi.

1

Si vous voulez que la même chose se produise à la fois à cause de la souris et d'une touche, cela n'aurait-il pas plus de sens d'avoir une méthode appelée par les deux? Autrement dit, vous avez une méthode comme fieldClicked qui est appelée à la fois par le MouseListener et par le KeyListener. Ce serait plus facile à déboguer - moins de déblatérer avec des événements, ce qui peut être très déroutant - et probablement plus lisible.

Questions connexes