Foro de elhacker.net

Programación => Java => Mensaje iniciado por: mapers en 12 Junio 2011, 00:44 am



Título: Evento del JFrame
Publicado por: mapers en 12 Junio 2011, 00:44 am
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


Título: Re: Evento del JFrame
Publicado por: 1mpuls0 en 12 Junio 2011, 06:05 am
Lo unico que se me ocurrio fue lo siguiente.

Código
  1. .
  2. .
  3. .
  4. addKeyListener(new java.awt.event.KeyAdapter() {
  5.            public void keyPressed(java.awt.event.KeyEvent evt) {
  6.                formKeyPressed(evt);
  7.            }
  8.        });
  9. .
  10. .
  11. .
  12.  
  13. private void formKeyPressed(java.awt.event.KeyEvent evt) {
  14.        if(evt.isControlDown()){
  15.            if(evt.getKeyCode()==49)
  16.            System.out.println("ctrl+1");
  17.        }
  18.    }
  19.  

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.


Título: Re: Evento del JFrame
Publicado por: mapers en 12 Junio 2011, 06:47 am
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
  1.  this.addKeyListener(this);
  2.  
eso iria o cual ?????


Título: Re: Evento del JFrame
Publicado por: 1mpuls0 en 12 Junio 2011, 07:14 am
 :¬¬

Código
  1. import javax.swing.JFrame;
  2. import java.awt.event.KeyAdapter;
  3. import java.awt.event.KeyEvent;
  4. import java.awt.FlowLayout;
  5. import java.awt.event.ActionListener;
  6. import java.awt.Dimension;
  7. import java.awt.event.KeyListener;
  8. import javax.swing.WindowConstants;
  9.  
  10. public class EventosJFrame extends JFrame implements KeyListener {
  11.  
  12. public static void main(String args[]) {
  13.        new EventosJFrame().setVisible(true);
  14.    }
  15.  
  16.    public EventosJFrame() {
  17.        iniciarInterfaz();
  18.    }                
  19.  
  20.    private void iniciarInterfaz() {
  21.  
  22.        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  23.        setMinimumSize(new Dimension(100, 100));
  24.        addKeyListener(this);
  25.        getContentPane().setLayout(new FlowLayout());
  26.  
  27.        pack();
  28.    }
  29.  
  30.    public void keyPressed(KeyEvent evt){
  31. if(evt.isControlDown()){
  32.            if(evt.getKeyCode()==49)
  33.            System.out.println("ctrl+1");
  34.        }
  35. }
  36.  
  37. public void keyReleased(KeyEvent evt){
  38. }
  39.  
  40. public void keyTyped(KeyEvent evt){
  41. }        
  42. }
  43.  


Título: Re: Evento del JFrame
Publicado por: mapers en 12 Junio 2011, 10:19 am
esto iria :D   en el constructor
Código
  1. addKeyListener(new java.awt.event.KeyAdapter() {
  2.  
  3.            public void keyPressed(java.awt.event.KeyEvent evt) {
  4.                eventos_teclado(evt);
  5.            }
  6.        });
  7.  

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


Título: Re: Evento del JFrame
Publicado por: mapers en 12 Junio 2011, 10:27 am
encontre esto en google
Código
  1. Usted tendría que agregar la clave de la escucha exactamente el componente que tiene el foco (muchos componentes son en realidad compuestos).
  2.  

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


Título: Re: Evento del JFrame
Publicado por: 1mpuls0 en 12 Junio 2011, 16:27 pm
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.

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


Utiliza requestFocus

Código
  1. addWindowListener( new WindowAdapter() {
  2.    public void windowOpened( WindowEvent e ){
  3.     requestFocus();
  4.      }
  5.    } );
  6.  


Saludos.


Título: Re: Evento del JFrame
Publicado por: mapers en 12 Junio 2011, 17:41 pm
todo me funciona ok gracias por el requestFocus pero desearia que ocurriera todos los eventos cuando presiono Escape mira
Código
  1. private void formKeyPressed(java.awt.event.KeyEvent evt) {                                
  2.  
  3.        switch(evt.getKeyCode()){
  4.            case KeyEvent.VK_ESCAPE :
  5.                System.out.println("mapers ");
  6.               this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
  7.                break;
  8.  
  9.  
  10.        }
  11.        // TODO add your handling code here:
  12.    }                              
  13.  
  14.  


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


Título: Re: Evento del JFrame
Publicado por: 1mpuls0 en 12 Junio 2011, 18:33 pm
Intenta con
Código
  1. System.exit(0);

Código
  1. private void formKeyPressed(java.awt.event.KeyEvent evt) {                                
  2.  
  3.        switch(evt.getKeyCode()){
  4.            case KeyEvent.VK_ESCAPE :
  5.                System.out.println("mapers ");
  6.               System.exit(0);
  7.                break;
  8.  
  9.  
  10.        }
  11.        // TODO add your handling code here:
  12.    }                              
  13.  
  14.  

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

Saludos.


Título: Re: Evento del JFrame
Publicado por: mapers en 12 Junio 2011, 19:15 pm
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
  1. this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
  2.  

pero al parecer no funciona pero si funciona
Código
  1. System.exit(0);
  2.  

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 ........................


Título: Re: Evento del JFrame
Publicado por: 1mpuls0 en 12 Junio 2011, 19:49 pm
No entendí con eso de "al parecer no funciona pero si funciona"  :xD
Intenta con estos métodos.

Código
  1. dispose();
Código
  1. setVisible(false);

Saludos


Título: Re: Evento del JFrame
Publicado por: mapers en 13 Junio 2011, 05:07 am
me refiero a que funciona el
Código
  1. System.exit(0);
  2.  

pero no el
Código
  1. this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
  2.  

solo deseo cerrar le ventana del evento no todas :S

pero ya me salio con el dispose()

gracias ..............


Título: Re: Evento del JFrame
Publicado por: 1mpuls0 en 13 Junio 2011, 05:10 am
Intenta con estos métodos.

Código
  1. dispose();
Código
  1. setVisible(false);


Título: Re: Evento del JFrame
Publicado por: mapers en 13 Junio 2011, 09:03 am
ahora mi duda es la siguiente :S mira en mi ventana hay botones y hasta un JunternalJFrame y  JTextfiel lo que pasa es que despues de usar  los ocmponenetes de mi interfaz y quiero cerrar mi ventana simplemente ya no detecta el teclado o esque se cambio de focus si es asi como puedo regresarlo........los botones de control los tiene el JInternalFrame ..............gracias por todo .........

si me  funciona tu metodo siempore y cuando no haga nada en la ventana ....................................
o debo colocar el

Código
  1. addWindowListener( new WindowAdapter() {
  2.    public void windowOpened( WindowEvent e ){
  3.     requestFocus();
  4.      }
  5.    } );
  6.  

por cada evento que hago para que refresque mi focus