Tecla enter para botões swing

10 respostas
W

sou desenvolvedor novato

estou desenvolvendo uma IU no Eclipse com três botões:

cadastrar, limpar, sair

gostaria de selecionar os botões com o tab e quando apertar o enter disparar a ação do botão selecionado naquele momento.

detalhe, ja utilizei os códigos abaixo não funcionou:

BCadastrar.addActionListener(this);

BCadastrar.setMnemonic(KeyEvent.VK_ENTER);

Alguém poderia me dar um dica.

Se rolar um tutorial também seria bacana.

Abraço!

Wagner

10 Respostas

R

Em geral o enter não funciona porque para componentes de texte o Enter pode servir para outras coisas. Eu uso a tecla F2 e aí tudo funciona direito…

W

ola renzonuccitelli

mas pensando e funcionalidade, fica muitos mais facil na hora de um cadastro utilizar apenas o teclado.

de qualquer forma, agradeço!

abraço!

R

Sim, a tecla F2 fica no teclado, até onde eu lembro…

W

confuso, rsrsrsrs
abraço!

R

Vai um trecho de código então:

private void inicializarAcoesPadrao() {
		this.getActionMap().put("cadastrar", new AbstractAction(){
			@Override
			public void actionPerformed(ActionEvent e) {
				botaoCadastrar.doClick();	
			}
			
		});
		
		this.getActionMap().put("help", new AbstractAction(){
			@Override
			public void actionPerformed(ActionEvent e) {
				campoMensagemAjuda.setVisible(!campoMensagemAjuda.isVisible());
				int height=form.getParent().getHeight();
				
				if(campoMensagemAjuda.isVisible()){
					height+=74;
				}
				else{
					height-=74;
				}
				form.getParent().setSize(form.getParent().getWidth(), height);
			}
		});
		this.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0),"cadastrar");
		this.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0),"help");
	}

minha classe extendia um JPanel. Mas então, quando eu tentava executar a ação com VK_ENTER ele não funcionava. Quando coloquei F2 e outras teclas qua nao as de caracteres ele passou a funcionar. Talvez alguem pode responder porque isso acontece.

W

Vou começar a digerir o código.

complicado

D

vc quer quando o usuario digite algo em um campo texto aperte enter faça uma função correto??

faça um evento
1- key
2- keypressed

dentro do evento vc coloca o seguinte codigo:

if(evt.getKeyCode() == evt.VK_ENTER){

System.out.println(“Entrou na condição " +”\n "+ “consegui” );

}

se entrar na condição é pq está funcionaldo
espero ter ajudado

P

Você pode utilizar uma tecla para cada botao usando ActionMap. Veja este exemplo:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

import javax.swing.*;

  
public class ExemploActions extends JFrame {  
  
    public ExemploActions() {  
        Action okAction = new MessageAction("OK", "Ação OK");  
        Action cancelAction = new MessageAction("Cancelar", "Ação Cancelar");  
        Action helpAction = new MessageAction("Ajuda", "Ação Ajuda");  
        Action altAction = new MessageAction("Alt", "Ação alt");
  
        JButton okButton = new JButton(okAction);  
  
        Container c = getContentPane();  
        c.setLayout(new FlowLayout());  
        c.add(new JTextField(40));  
        c.add(okButton);  
        c.add(new JButton(cancelAction));  
  
//        getRootPane().setDefaultButton(okButton);  
  
        getRootPane().getActionMap().put("ok", okAction);  
        getRootPane().getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "ok");  
  
        getRootPane().getActionMap().put("cancel", cancelAction);  
        getRootPane().getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "cancel");  
  
        getRootPane().getActionMap().put("help", helpAction);  
        getRootPane().getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0), "help");  
        
        getRootPane().getActionMap().put("alt", altAction);  
        getRootPane().getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ALT, 0), "alt");
  
        setSize(640, 480);  
        setDefaultCloseOperation(EXIT_ON_CLOSE);  
    }  
  
    @SuppressWarnings("serial")
	class MessageAction extends AbstractAction {  
        String _msg;  
  
        MessageAction(String name, String msg) {  
            putValue(NAME, name);  
            _msg = msg;  
        }  

		@Override
		public void actionPerformed(ActionEvent arg0) {
			JOptionPane.showMessageDialog(ExemploActions.this, _msg);  
			
		}  
    }  
  
    public static void main(String[] args) {  
        new ExemploActions().setVisible(true);  
    }  
}

Espero ter ajudado.

K

IMHO,

Eu extenderia a classe JButton e faria meu proprio JButton com um ActionMap ou KeyListener whatever escutando a tecla Enter. Entendeu?

Boa sorte! :slight_smile:

W

obrigado galera

agora ja tenho um norte.

abraço a todos!

Criado 10 de janeiro de 2009
Ultima resposta 11 de jan. de 2009
Respostas 10
Participantes 5