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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top