Question

Je travaille sur un projet Java et doivent avoir une pression de touche simuler un clic sur un JTextField. Ce que je suis à la recherche est l'équivalent de la méthode DButton DoClick ().

Je suis en train d'avoir la pression de touche « entrer » Effectuer exactement la même fonction qu'un clic sur le JTextField.

Je ne sais pas ce que d'autres informations à fournir. Merci à l'avance.

Était-ce utile?

La solution 2

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

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

    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 savais pas comment appeler le JTextField que vient d'être entré si je voulais simuler un clic sur le JTextField (qui appelle à se concentrer). Je suppose que je devrais viens d'expliquer mon problème entier.

Merci.

Autres conseils

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 "Entrez" à votre JTextField. Cela a été volé .

Si vous voulez que la même chose se produise à la fois en raison de la souris et appuyez sur la touche, ne serait-il pas plus logique d'avoir une méthode appelée par les deux? Autrement dit, vous avez une méthode comme fieldClicked qui est appelé à la fois par le MouseListener et par le KeyListener. Ce serait plus facile de débogage - moins déblayage au sujet des événements, ce qui peut être très déroutant -. Et probablement plus lisible

  

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

ne fait toujours 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 texte. Le ActionListener est invoquée lorsque la touche Entrée. Mais alors comment vous deviner où sur le cadre pour générer un clic de souris? On dirait que la logique aléatoire pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top