Como identificar o "enter" em um botão que está em um JOptionPane?

5 respostas
P

Pessoal,

Estou utilizando um objeto da classe JOptionPane para exibir uma mensagem e ele contém três botões (sim, não, cancelar).
Daí um dos botões fica com o foco e isso pode ser alterado dando um “TAB”, mas quando o usuário clica no “ENTER”, ele não faz nada, ou seja, ele não interpreta isso como uma execução do botão, já se o usuário clicar no “ESPAÇO” ele interpreta corretamente e o software continua normalmente.

O que devo fazer para que quando o usuário clicar “ENTER” ele execute aquela funcionalidade do botão correspondente? Como capturo isso?

Agradeço por qq ajuda.

Até +…
Paulo D.

5 Respostas

maiconramones

Você terá que adicionar um KeyLister, que é o “cara” que vai ficar escutando os eventos que acontecem no teclado. De uma pesquisa que aqui no guj mesmo você vai achar alguns exemplos. E também tem a documentação da api http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/KeyEvent.html

Flw

davidbuzatto

Para que você possa fazer isso vc vai ter que criar seu própio diálogo, pois não há como interceptar o evento de um botão de um optionpane.

T

http://www.devx.com/tips/Tip/14318 diz o que pode ser feito em um JDialog ou JFrame; entretanto, um botão que tem o foco de um JOptionPane deve ser acionado com a barra de espaços, não com ENTER (infelizmente). Se precisar REALMENTE disso, talvez você tenha de fazer uma subclasse de JOptionPane que tenha o comportamento desejado.

marciofermino

O amigo David tem toda rezao
vc precisa criar seu proprio dialogo

faz assim
cria um novo jframe e faça com que ele se pareca como um dialog ai sim vc vai poder
ter controle total de teclas e eventos.

peerless

da pra ser melhorado.. fiz correndo só pra testar a idéia do thingol

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

//by peerless
public class JOptionPaneWithEnterSupport extends JOptionPane {
    
	
	/**
	 * peerless
	 */
	private static final long serialVersionUID = 1L;

	public JOptionPaneWithEnterSupport() {
	        JPanel b = (JPanel) this.getComponent(1);
	        final JButton acheiVoce = (JButton) b.getComponent(0);
	        acheiVoce.addKeyListener(new KeyAdapter(){
	        	@Override
	        	public void keyReleased(KeyEvent arg0) {
	        		if (arg0.getKeyCode() == KeyEvent.VK_ENTER)
	        			acheiVoce.doClick();
	        			
	        	}
	        });
	}
	
	public static void main(String[] args) {
		JOptionPaneWithEnterSupport o = new JOptionPaneWithEnterSupport();
		o.showMessageDialog(null, "teste");
	}
}
Criado 28 de fevereiro de 2008
Ultima resposta 29 de fev. de 2008
Respostas 5
Participantes 6