É possível detectar quando alguém pressiona Enterao digitar um JTextField em java? Sem ter que criar um botão e defini-lo como padrão.
É possível detectar quando alguém pressiona Enterao digitar um JTextField em java? Sem ter que criar um botão e defini-lo como padrão.
Respostas:
A JTextField
foi projetado para usar ActionListener
exatamente como a JButton
é. Veja o addActionListener()
método de JTextField
.
Por exemplo:
Action action = new AbstractAction()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("some action");
}
};
JTextField textField = new JTextField(10);
textField.addActionListener( action );
Agora o evento é disparado quando a Enterchave é usada.
Além disso, um benefício adicional é que você pode compartilhar o ouvinte com um botão, mesmo se não quiser tornar o botão um botão padrão.
JButton button = new JButton("Do Something");
button.addActionListener( action );
Observe que este exemplo usa um Action
, que implementa ActionListener
porque Action
é uma API mais recente com recursos adicionais. Por exemplo, você pode desabilitar o Action
que desabilitaria o evento para o campo de texto e o botão.
JTextField function=new JTextField(8);
function.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//statements!!!
}});
tudo que você precisa fazer é adicionarActionListener ao JTextField como acima! Após pressionar Entera ação será realizada o que você deseja no extrato!
Adicione um evento para KeyPressed
.
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
// Enter was pressed. Your code goes here.
}
}
KeyListeners
têm muitas deficiências, que são resolvidas em maior medida por KeyBindings
, como, relacionado ao foco, relacionado ao copiar / colar e muitos mais. Deve ser evitado, para tarefas triviais, como, conforme solicitado no OP.
Você quer fazer algo assim?
JTextField mTextField = new JTextField();
mTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
// something like...
//mTextField.getText();
// or...
//mButton.doClick();
}
}
});
Primeiro adicione o comando de ação em JButton ou JTextField por:
JButton.setActionCommand("name of command");
JTextField.setActionCommand("name of command");
Em seguida, adicione ActionListener a JTextField e JButton.
JButton.addActionListener(listener);
JTextField.addActionListener(listener);
Depois disso, On you ActionListener implementação de gravação
@Override
public void actionPerformed(ActionEvent e)
{
String actionCommand = e.getActionCommand();
if(actionCommand.equals("Your actionCommand for JButton") || actionCommand.equals("Your actionCommand for press Enter"))
{
//Do something
}
}
As outras respostas (incluindo as aceitas) são boas, mas se você já usa Java8, você pode fazer o seguinte (de uma forma mais curta e mais recente):
textField.addActionListener(
ae -> {
//dostuff
}
);
Conforme a resposta aceita, você pode simplesmente reagir com um ActionListener
, que captura a tecla Enter.
No entanto, minha abordagem se beneficia dos conceitos funcionais introduzidos no Java 8.
Se quiser usar a mesma ação, por exemplo, para um botão e o JTextField, você pode fazer o seguinte:
ActionListener l = ae -> {
//do stuff
}
button.addActionListener(l);
textField.addActionListener(l);
Se precisar de mais explicações, por favor me avise!
Se você deseja definir uma ação de botão padrão em um JTextField enter, você deve fazer isto:
//put this after initComponents();
textField.addActionListener(button.getActionListeners()[0]);
É [0] porque um botão pode ter várias ações, mas normalmente tem apenas uma (ActionPerformed).
Para cada campo de texto em seu quadro, invoque o método addKeyListener. Em seguida, implemente e substitua o método keyPressed, como outros indicaram. Agora você pode pressionar Enter em qualquer campo do quadro para ativar sua ação.
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
//perform action
}
}
public void keyReleased(KeyEvent e)
{
int key=e.getKeyCode();
if(e.getSource()==textField)
{
if(key==KeyEvent.VK_ENTER)
{
Toolkit.getDefaultToolkit().beep();
textField_1.requestFocusInWindow();
}
}
Para escrever a lógica para 'Enter pressione' JTextField
, é melhor manter a lógica dentro do keyReleased()
bloco em vez de keyTyped()
& keyPressed()
.
KeyListeners
São de nível muito baixo da Swing
perspectiva de. Use a API que se destina a ser usado com Swing
:-)
Basta usar este código:
SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);