Atalho para Botões - sem pressionar Alt

1 resposta
L

Galera

Gostaria que nas minhas telas de cadastro os botoes Novo, Alterar, Excluir, Salvar, Sair e Cancelar sejam ativados por atalhos…como F1, F2, F10, etc… mas apenas consequir fazer com que os atalhos funcionem pressionando primeiro a tecla ALT …
Ja vi bastante tópicos sobre isso…mas ainda nenhuma resposta correta.

Se alguem descobrir algo…

Abraço

public void atalhos() {  
         btCancelar.setMnemonic(KeyEvent.VK_C);  
         btNovo.setMnemonic(KeyEvent.VK_N);  
         btAlterar.setMnemonic(KeyEvent.VK_A);  
         btExcluir.setMnemonic(KeyEvent.VK_E);  
         btSalvar.setMnemonic(KeyEvent.VK_S);  
         btSair.setMnemonic(KeyEvent.VK_R);  
   
     }

Desde jeito com a tecla ALT pressionada primeiro…o atalho funciona.

1 Resposta

R

Você pode fazer isso de duas formas. Uma é adicionar um listener no botão para responder quando a tecla pressionada, porém utilizando esta forma o evento só é disparado quando o foco está no botão:

// Teste JButton com mnemonico e listener
		final JButton cmdOK = new JButton("OK");
		
		//Exemplo com listener direto no botão
		cmdOK.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				if(e.getKeyCode() == KeyEvent.VK_F1) {
				}
			}
			
		});

A segunda forma é melhor pois funciona mesmo sem o foco estar no botão:

JButton cmdOK = new JButton("OK");
		
		//Exemplo com Action
		Action actionTecla = new AbstractAction() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
                                //simula o click no botão
				cmdOK.doClick();
				
			}
		}; 
                //Associa o listener com a tecla f1 para que seja disparado toda vez, mesmo quando o foco não está no botão
		KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0);
		String actionName = "TECLA_F1";
		InputMap inputMap = cmdOK.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
		inputMap.put(keyStroke, actionName);
		ActionMap actionMap = cmdOK.getActionMap();
		actionMap.put(actionName, actionTecla);

Até mais

Criado 25 de junho de 2011
Ultima resposta 25 de jun. de 2011
Respostas 1
Participantes 2