Cerrar JDialog con tecla ESC

Para darle un poco mas de caché a nuestras aplicaciones les mostraré código para cerrar un JDialog presionando la tecla ESC. Este ejemplo da para eso y mucho mas, ya depende de ustedes.

Primero necesitamos esta clase que es la que cacha los eventos del teclado:
/**
 * @JaverosAnonimos on Twitter 
*/
public class KeyListenerCustom implements KeyListener{
    private JDialog dialog=null;
    public KeyListenerCustom(JDialog dialog){
        System.out.println("Dialog!");
        this.dialog=dialog;
    }
    public void keyTyped(KeyEvent e) {
        System.out.println("Tecla apretada");
    }

    public void keyPressed(KeyEvent e) {
        System.out.println("entro");
        if(e.getKeyCode()==27) {//27 es el código de la tecla esc
            System.out.println("Adios!");
            dialog.setVisible(false);
        }
    }

    public void keyReleased(KeyEvent e) {
        System.out.println("Después de soltar la tecla!");     
    }

}
Y para probar esta clase un ejemplo de un JDialog implementandolo:
public class EjemploESC extends javax.swing.JDialog {
    /** Creates new form InformacionDialog */
    public EjemploESC(java.awt.Frame parent, boolean modal,String name) {
        super(parent, modal);
        initComponents();
        setTitle("Ejemplo cerrar con telca ESC");
        jPanel1.grabFocus();
        jPanel1.addKeyListener(new KeyListenerCustom(this));
    }
    

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // 
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jPanel1.setName("jPanel1"); // NOI18N

        jLabel1.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("www.JaverosAnonimos.tk ");
        jLabel1.setName("jLabel1"); // NOI18N

        jLabel2.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel2.setText("http://JaverosAnonimos.blogspot.com");
        jLabel2.setName("jLabel2"); // NOI18N

        jLabel3.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
        jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel3.setText("Presiona ESC para cerrar");
        jLabel3.setName("jLabel3"); // NOI18N

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 331, Short.MAX_VALUE)
                    .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 331, Short.MAX_VALUE)
                    .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 331, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addGap(63, 63, 63)
                .addComponent(jLabel3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 78, Short.MAX_VALUE)
                .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// 

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                EjemploESC dialog = new EjemploESC(null, true,"");
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JPanel jPanel1;
    // End of variables declaration
}
Nota: Disculpen en chorote del ejemplo pero este código fue generado con NetBeans si quiren descargar el fuente pueden hacerlo aquí

4 Comentarios

  1. Pues estaba ahí... O_o Lo subiremos mas tarde gracias por avisar.

    ResponderBorrar
  2. Lo siento pero perdimos el proyecto, aunque ahí esta el código :) Saludos

    ResponderBorrar
  3. MALASO... Cuando lo cierro, sigue encendido en el eclipse, eso quiere decir que sólo está oculto pero no sea cerrado por completo...

    ResponderBorrar

Publicar un comentario

Artículo Anterior Artículo Siguiente