JFrame : Botão padrão não recebe "Enter"

Boa tarde pessoal,

Eu estou com um problema ligeiramente estranho, é o seguinte: tenho um JFrame, e no seu método construtor eu utilizei

getRootPane().setDefaultButton(buttonContinuar);
// buttonContinuar é o unico botão na tela

O problema é que realmente o botão aparece selecionado (com a marcação azul em volta), mas não consigo selecioná-lo via tecla “Enter”. Usando mnemonics funciona corretamente mas não é esse o meio que quero utilizar nesta tela. Caso eu não insira essa linha de código o botão não aparece em azul, então dá pra concluir que essa linha está fazendo efeito, correto?

Obrigado pessoal!

Construtor:

public TelaEntrada() {
  // Setar icone
  URL url = this.getClass().getResource("/images/icon25.png");
  Image imagemTitulo = Toolkit.getDefaultToolkit().getImage(url);
  this.setIconImage(imagemTitulo);
  // Inicialização da variável de referencia
  instance = this;
  // Inicialização dos componentes
  initComponents();
  // Coloca a tela no centro
  setLocationRelativeTo(null);
  // Seta botão pré-selecionado
  getRootPane().setDefaultButton(buttonContinuar);
}

Que tal assim:
JRootPane rootPane = SwingUtilities.getRootPane(buttonContinuar);
rootPane.setDefaultButton(buttonContinuar);

Fonte: How to set the Java default button to react on ENTER key released?

1 curtida

Acabei de testar tanto no construtor do JFrame quanto na inicialização do botão, e nada funcionou. Detalhe: quando eu retiro os códigos que “tornam o botão default”, o botão fica cinza, sem seleção, e quando eu os coloco novamente ele fica azul, mas apenas selecionável ao apertar TAB, ALT+C ou com o mouse. Existe um JTextField no JFrame, e tanto o JTextField quanto o JButton estão em um JPanel.

Consegui resolver o problema excluindo o JTextField e configurando novamente as interações do botão e dele mesmo. Obrigado!