2012-04-25 16 views
5

Tengo un requisito peculiar:Cerrar un cuadro de diálogo al presionar Enter

Tengo un diálogo de diálogo modal Crear nuevo objeto con una serie de campos y botones Aceptar y Cancelar. Quiero que el botón Aceptar tenga foco, por lo que el usuario puede simplemente invocar el cuadro de diálogo y presionar Enter para crear un nuevo objeto con valores predeterminados. Intenté llamar al requestFocusInWindow(), pero eso no funciona hasta que realmente se muestre la ventana. No puedo llamarlo después de que se muestre la ventana, porque el diálogo es modal. Y no hay un método como setInitialFocusedComponent() en la clase de diálogo.

OK, entonces procedí a crear un KeyListener para cada campo en el cuadro de diálogo (solo 3 de ellos, no es gran cosa), que presionaría manualmente el botón OK si el usuario presionó Enter sobre ellos. El problema ahora es que el primer campo (y, por lo tanto, el enfocado) es un JSpinner, que consume su propio KeyEvents. Así que presionar Enter no hace nada.

¿Cómo puedo lograr este comportamiento de "Entrar a OK" en mi cuadro de diálogo sin reorganizar los elementos?

Respuesta

8

dos cosas:

  1. ¿Ha intentado utilizar el setDefaultButton ?: dialog.getRootPane().setDefaultButton(okButton)
  2. Usted podría considerar invocar su requestFocusInWindow() en una invokeLater.

De esta manera:

SwingUtilities.invokeLater(new Runnable() 
    @Override 
    public void run() { 
     okButton.requestFocusInWindow(); 
    } 
}); 
+0

El método setDefaultButton hizo el truco! Gracias. –

+1

+1, me gustó la respuesta, qué fácil es con el botón predeterminado :-). Solo una nota al margen de Java Docs: "La implementación exacta de la función del botón predeterminado depende de la apariencia. Por ejemplo, en la apariencia de Windows, el botón predeterminado cambia a cualquier botón que tenga el foco, de modo que presionar Entrar clics el botón enfocado. Cuando ningún botón tiene el foco, el botón que originalmente se especificó como el botón predeterminado se convierte en el botón predeterminado de nuevo ". –

Cuestiones relacionadas