Como você simula um clique em um JTextfield? Equivalente a jbutton doclick ()?
-
20-09-2019 - |
Pergunta
Estou trabalhando em um projeto Java e preciso ter um KeyPress simular um clique em um JTextfield. O que estou procurando é o equivalente ao método jbutton doclick ().
Estou tentando fazer com que o keypress "enter" execute exatamente a mesma função que clique no JTextfield.
Não tenho certeza de que outras informações fornecer. Desde já, obrigado.
Solução 2
Ok, obrigado pela ajuda. Acho que não estava sendo claro, mas agora descobri uma maneira de fazer meu código funcionar graças a algumas de suas idéias.
Eu já havia pensado em apenas criar um método privado chamado pelas duas funções, mas parte do código precisa saber em qual JTextField o usuário está clicado. Descobri .getFocusOwner (), que me permite fazer referência ao item atual com foco (o JTextfield). Algo assim
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);
}
}
Provavelmente havia uma maneira melhor de fazer isso, mas basicamente eu tinha uma variedade de jtextfields e o programa estava funcionando corretamente quando os usuários clicaram no próximo JTextfield, mas ao pressionar Enter, eu não sabia como ligar para o JTextfield que acabou de entrar Então, eu queria simular um clique no JTextfield (que exige foco). Acho que deveria ter explicado todo o meu problema.
Obrigada.
Outras dicas
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 o seu JTextfield. Isso foi roubado de aqui.
Se você deseja que a mesma coisa aconteça devido ao mouse e à imprensa de teclas, não faria mais sentido ter um método chamado por ambos? Isto é, você tem um método como fieldClicked
que é chamado ambos pelos MouseListener
e pelo KeyListener
. Seria mais fácil depurar-sem problemas com os eventos, o que pode ser muito confuso-e provavelmente mais legível.
O que eu quero é quando o usuário pressiona Enter, ele chama o mesmo código de quando eles clicam em qualquer lugar do quadro
Ainda não faz sentido para mim.
Quando o usuário clica em qualquer lugar no quadro, algumas coisas acontecem:
a) O campo de texto perde o foco
b) Alguns outros ganhos de componentes focam
Você pode adicionar um Listener Action ao campo de texto. O ActionListener é chamado quando a tecla Enter é pressionada. Mas então como você adivinhe onde no quadro gerar um clique do mouse? Parece uma lógica aleatória para mim.