Foros del Web » Programación para mayores de 30 ;) » Java »

Duda sobre Eventos

Estas en el tema de Duda sobre Eventos en el foro de Java en Foros del Web. Hola, Tengo una duda sobre el tratamiento de eventos. Yo lo hago de una forma, pero no se si es la forma adecuada. Pongo el ...
  #1 (permalink)  
Antiguo 06/11/2007, 11:54
 
Fecha de Ingreso: junio-2005
Mensajes: 60
Antigüedad: 19 años, 5 meses
Puntos: 0
Duda sobre Eventos

Hola,

Tengo una duda sobre el tratamiento de eventos. Yo lo hago de una forma, pero no se si es la forma adecuada. Pongo el ejemplo siguiente:

Tengo un JFrame1 y JFrame2. En el JFrame2 tengo un JTextField y en el JFrame1 tengo un boton en el cual al pulsar muestra un texto en el JTextField del JFrame1.

La forma de en que lo hago yo es asi por ejemplo:

Clase JFrame1:

Código PHP:
public class JFrame1 extends JFrame{
    
JTextField miTextField = new JTextField(10);
   
    public 
JFrame1() {
        
setSize(200,200);                  
        
this.add(miTextField);             
        
setVisible(true);
    }
    
    public static 
void main(String[] args) {
        
JFrame1 miJFrame1 = new JFrame1();
        
JFrame2 miJFrame2 = new JFrame2(miJFrame1.miTextField);
    }
    

Clase JFrame2:

Código PHP:
public class JFrame2 extends JFrame{
    
JButton miJButton = new JButton("Hola");
    
JTextField copiaTextField;
    public 
JFrame2(JTextField AuxJTextField) {
        
copiaTextField AuxJTextField;
        
setSize(200,200);
        
this.add(miJButton);
        
setVisible(true);   
        
miJButton.addMouseListener(new Interrupcion(copiaTextField));
    }

Clase que trata la Interrupcion:

Código PHP:
public class Interrupcion implements MouseListener{
    
JTextField textFieldCopia;
    
/** Creates a new instance of Interrupcion */
    
public Interrupcion(JTextField miJTextField) {
        
textFieldCopia miJTextField;
    }

    public 
void mouseClicked(MouseEvent e) {
        
textFieldCopia.setText("Escribiendo...");
    }

    public 
void mousePressed(MouseEvent e) {

    }

    public 
void mouseReleased(MouseEvent e) {
    }

    public 
void mouseEntered(MouseEvent e) {
    }

    public 
void mouseExited(MouseEvent e) {
    }


Esto me funciona correctamente. Se que si todo lo tuviese en un mismo Jframe seria diferente, pero en este caso lo tengo en diferentes JFrame y lo que hago es pasarle una "copia" del elemento que necesito (en este caso el JTextField) sobre el que realizo los cambios. Pero esto me parece que va encontra de la reutilizacion de clases,no? Pues por ejemplo la clase JFrame2 su constructor es public "JFrame2(JTextField AuxJTextField)", es decir que solo podria reutilizarla pasandole un JTextField, cosa que me hace pensar que el JTextField, no deberia de pasarle como parametro y si de alguna forma diferente.
¿Estoy haciendo las cosas bien o mal?
  #2 (permalink)  
Antiguo 06/11/2007, 22:48
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Re: Duda sobre Eventos

Hola:

Hay muchas formas de hacerlo y lo de bien o mal depende un poco de hasta qué punto tengas previsto reutilizar tu clase. Ahora mismo tienes un JFrame con un botón capaz de escribir en un JTextField. Si no tienes previsto reutlizar esta clase en otros programas para cosas distintas, lo que tienes está bien.

Sin embargo, siguiendo el mismo estilo, puedes mejorarla pasando cosas más genéricas. Por ejemplo, si en vez de recibir un JTextField recibes un JTextComponent -clase padre de JTextField-, te vale igual y tu clase admitiría más tipos de componentes, como JTextArea o JEditorPane.

Generalizando más, el JTextComponent lleva dentro un Document -se obtiene con getDocument()- que es el modelo de datos de todos los JTextComponent. Si pasas ese Document al JFrame, es aun más general, ya que ya no dependes de un componente SWING, sino de un modelo de datos que se puede usar en cualquier lado. De hecho, Document es una interface, por lo que es casi lo más general. Alguien podría hacer una clase que implemente Document de forma que escriba el texto en pantalla, en la impresora o lo mande por socket. Haciendo que tu JFrame reciba un Document, tendrías un JFrame con botón capaz de escribir texto en cualquier sitio, incluida pantalla, impresora o socket.

Si vas más allá, puedes incluso hacer tu propia interface más sencilla, con un método setText(). Básicamente tendrías lo mismo que con Document, pero no obligas a la gente que use tu clase a implementar tantos métodos para algo sencillo.

Finalmente, puedes cambiar totalmente de filosofía. Haz que el JFrame2 reciba en el constructor un MouseListener y ese MouseListener se lo añada al botón. Al instanciar JFrame2 en el main, pásale un new interrupcion(textField). De esta forma tienes un JFrame con botón que puede hacer cualquier cosa, dependiendo del MouseListener que se le pase desde fuera.

¿Qué forma es la buena?. Depende de la previsión que tú tengas para reutilizar el JFrame2. Si vas a hacer muchos programas que tengan un JFrame con botón dentro que haga cosas variadas, es mejor la última forma que te he comentado. Si no vas a hacer muchos programas que tengan un JFrame con botón dentro, posiblemente es mejor dejar dentro de JFrame2 la mayor cantidad de código que puedas.

Una tontería. Para que los botones hagan algo, se suele usar addActionListener() en vez de addMouseListener().

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 07/11/2007, 17:07
 
Fecha de Ingreso: junio-2005
Mensajes: 60
Antigüedad: 19 años, 5 meses
Puntos: 0
Re: Duda sobre Eventos

Gracias por la respuesta, me servira para mejorar mi programacion :)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:44.