Evento del JFrame

Iniciado por mapers, 12 Junio 2011, 00:44 AM

0 Miembros y 1 Visitante están viendo este tema.

mapers

Buenas señores del Foro desearia que me dieran una manita con esto necesito abrir una ventana con  eventos del teclado por ejemplo.
abro mi JFrame como ventana ´principal y luego preciono "CTL + 1 " me abra una ventana  luego presiono "CTL + 2 " me abra otra ventana y asi ...........como podria implementar el metodo .................un ejemplo profabor

1mpuls0

Lo unico que se me ocurrio fue lo siguiente.

Código (java) [Seleccionar]

.
.
.
addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                formKeyPressed(evt);
            }
        });
.
.
.

private void formKeyPressed(java.awt.event.KeyEvent evt) {
        if(evt.isControlDown()){
            if(evt.getKeyCode()==49)
            System.out.println("ctrl+1");
        }
    }


Colocas el evento de keypressed al jframe y en tu método primero verificas si la tecla que se oprimio fue ctrl y despues si fue el número 1 (en ascii es el valor 49)

si se cumplen esas dos condiciones entonces realizas la llamada a tu ventana.

El problema es que cuando tengas mas componentes sobre el jframe donde tengas el evento no te va a funcionar.

Tal vez no sea la forma correcta, pero es una posible solucion.

Saludos.
abc

mapers

groso men  funciona pero hay algo que no manyo bien esa parte del codigo la sacastes con el editor del netbeans, pero que pasa si quiero implementarlo a mano que iria en components para que escuche los eventos del teclado esto :
Código (java) [Seleccionar]

  this.addKeyListener(this);

eso iria o cual ?????

1mpuls0

 :¬¬

Código (java) [Seleccionar]

import javax.swing.JFrame;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.Dimension;
import java.awt.event.KeyListener;
import javax.swing.WindowConstants;

public class EventosJFrame extends JFrame implements KeyListener {

public static void main(String args[]) {
        new EventosJFrame().setVisible(true);
    }

    public EventosJFrame() {
        iniciarInterfaz();
    }               
           
    private void iniciarInterfaz() {

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setMinimumSize(new Dimension(100, 100));
        addKeyListener(this);
        getContentPane().setLayout(new FlowLayout());

        pack();
    }
   
    public void keyPressed(KeyEvent evt){
if(evt.isControlDown()){
            if(evt.getKeyCode()==49)
            System.out.println("ctrl+1");
        }
}

public void keyReleased(KeyEvent evt){
}

public void keyTyped(KeyEvent evt){
}         
}
abc

mapers

esto iria :D   en el constructor
Código (java) [Seleccionar]

addKeyListener(new java.awt.event.KeyAdapter() {

            public void keyPressed(java.awt.event.KeyEvent evt) {
                eventos_teclado(evt);
            }
        });


el resto lo implemenaria dependiendo que evento deseo que ocurra ahora mi  duda es la siguiente porque en algunos casos no ocurre el evento solo cuando la ventana esta sin componentes ocurres esos eventos pero cuando esta con componentes como Jtextfield o combobox ya no ocurre nada de los eventos que uno les implemnta a que se deve o hay algun metodo que me falte llamar

mapers

encontre esto en google
Código (java) [Seleccionar]

Usted tendría que agregar la clave de la escucha exactamente el componente que tiene el foco (muchos componentes son en realidad compuestos).


como haria para colocar el componente foco al JFrame para que escuche el evento

1mpuls0

#6
Cita de: mapers en 12 Junio 2011, 10:19 AM
cuando esta con componentes como Jtextfield o combobox ya no ocurre nada de los eventos que uno les implemnta a que se deve o hay algun metodo que me falte llamar

Creo que que ya lo habia mencionado antes.

Cita de: 1mpuls0 en 12 Junio 2011, 06:05 AM
El problema es que cuando tengas mas componentes sobre el jframe donde tengas el evento no te va a funcionar.


Utiliza requestFocus

Código (java) [Seleccionar]

addWindowListener( new WindowAdapter() {
   public void windowOpened( WindowEvent e ){
    requestFocus();
     }
   } );



Saludos.
abc

mapers

#7
todo me funciona ok gracias por el requestFocus pero desearia que ocurriera todos los eventos cuando presiono Escape mira
Código (java) [Seleccionar]

private void formKeyPressed(java.awt.event.KeyEvent evt) {                                

       switch(evt.getKeyCode()){
           case KeyEvent.VK_ESCAPE :
               System.out.println("mapers ");
              this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
               break;


       }
       // TODO add your handling code here:
   }                              




me  imprime en pantalla pero no ejecuta la linea para cerrar la ventana :D a que se deve esto

1mpuls0

Intenta con
Código (java) [Seleccionar]
System.exit(0);

Código (java) [Seleccionar]

private void formKeyPressed(java.awt.event.KeyEvent evt) {                               

        switch(evt.getKeyCode()){
            case KeyEvent.VK_ESCAPE :
                System.out.println("mapers ");
               System.exit(0);
                break;


        }
        // TODO add your handling code here:
    }                               



Código (java) [Seleccionar]
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
Es una propiedad del jframe que se supone ya debiaste haber definido desde antes.

Saludos.
abc

mapers

ese si funciona men pero solo deseo que se me cierre la ventana que tengo presente y no todas las ventanas :D por eso uso
Código (java) [Seleccionar]

this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);


pero al parecer no funciona pero si funciona
Código (java) [Seleccionar]

System.exit(0);


no existira otro metodo parecido al primero en el que solo pueda cerrar la ventan del evento y que no s em cierre toda mi aplicacion ........................