¿Cómo se puede simular un clic en un JTextField? Equivalente de JButton doClick ()?
-
20-09-2019 - |
Pregunta
Estoy trabajando en un proyecto Java y necesita tener una pulsación de tecla simular un clic en un JTextField. Lo que estoy buscando es el equivalente del método JButton doClick ().
Estoy tratando de tener la pulsación de tecla "ENTER" realizan la misma función exacta como un clic en el JTextField.
No está seguro de qué otra información para proporcionar. Gracias de antemano.
Solución 2
OK, gracias por la ayuda. Supongo que no estaba siendo clara, pero ahora he descubierto una manera de hacer mi trabajo código gracias a algunas de sus ideas.
Yo ya había pensado en sólo la creación de un método privado que fue llamado por ambas funciones, sino que forma parte del código tiene que saber lo que JTextField el usuario hace clic en. Descubrí .getFocusOwner (), lo que me permite hacer referencia al elemento actual con el foco (el JTextField). Algo como esto
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);
}
}
No fue probablemente una mejor manera de hacer esto, pero básicamente tuve una serie de JTextFields y el programa estaba funcionando correctamente cuando usuarios han hecho clic en el siguiente JTextField, pero cuando enter No sabía cómo llamar al JTextField que se acaba de entrar, así que quería simular un clic en el JTextField (que requiere atención). Supongo que debería haber acaba de explicar toda mi problema.
Gracias.
Otros consejos
public void simulateKey(KeyEvent e, Component c) {
Field f = KeyEvent.class.getField("focusManagerIsDispatching");
f.setAccessible(true);
f.set(e, Boolean.TRUE);
c.dispatchEvent(e);
}
Enviar "Enter" para su JTextField. Este fue robada a aquí .
Si desea que la misma cosa que suceda tanto por el ratón y pulsar una tecla, ¿no tendría más sentido tener un método llamado por ambos? Es decir, que tiene un método como el que es llamada fieldClicked
tanto por el MouseListener
y por el KeyListener
. Esto sería más fácil de depurar - menos curioseaba con los eventos, que pueden ser muy confuso -. Y probablemente más fácil de leer
Lo que quiero es cuando el usuario presiona introducir, llama al mismo código que cuando hacen clic en cualquier lugar en el marco
Sin embargo, no tiene sentido para mí.
Cuando el usuario hace clic en cualquier lugar en el marco de un par de cosas suceden:
a) el campo de texto pierde el foco
b) algunas otras ganancias componentes de enfoque
Se podría añadir un ActionListener al campo de texto. El ActionListener se invoca cuando se pulsa la tecla Intro. Pero entonces, ¿cómo adivinar en qué parte del marco para generar haga clic en un ratón? Parece que la lógica aleatoria a mí.