Java - Mandar datos entre JInternalFrames

 
Vista:
sin imagen de perfil

Mandar datos entre JInternalFrames

Publicado por camilo (2 intervenciones) el 09/09/2013 17:53:17
Buenas, el problema que tengo es justamente para pasar información entre dos JInternalFrames, una variable simplemente.
He buscado mucho y no he encontrado la forma, supongo que haciendo la variable global y poniéndole public, debería de poder verla desde el otro internal, pero no hay una forma mejor? Desde ya gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Mandar datos entre JInternalFrames

Publicado por Octavio Javier (74 intervenciones) el 12/09/2013 22:26:27
Hola amigo, lo que puedes hacer es tener una clase intermedia entre las 2, con lo cual tendrías el JInternalFrame-A y el JInternalFrame-B y la mediadora:

Desde mediadora creas las otras 2 clases y cuando necesitas pasar información de una a otra lo haces a través de mediadora, te cuento lo que realizo yo:

Cada ventana tiene una clase que la controla, de modo que al presionar un botón en la ventana esta acción es detectada por la mediadora y es esta clase quien ejecuta las acciones que deseamos.

Trato de explicarlo con un ejemplo. Supongamos que tenemos las ventanas localidad, y provincia y un mediador, lo hago con frames pero tranquilamente con JInternalFrame seria lo mismo:

__________________________________________________________________
mediador
__________________________________________________________________

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//OBservar que implementa actionListener, es decir debemos tener el metodo actionPerformed
class mediador implements ActionListener{
 
     private localidad loc = new localidad(); //creo en mediador un objeto de tipo localidad (JInternalFrame)
     private provincia pro = new provincia(); // y un objeto de tipo provincia (JInternalFrame).
 
    public mediador() {
        //este es el constructor del mediador, se deberia llamar a esta clase y no a la localidad o provicia.
        loc.setActionListener(this); //con esto decimos que esta clase tiene control sobre los clic que se hacen en localidad
        pro.setActionListener(this); //con esto decimos que esta clase tiene control sobre los clic que se hacen en provincia
        loc.setVisible(true);
        pro.setVisible(true);
    }
 
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == loc.getjButtonIndicar()){ // si se hace clic en el boton indicar de la localidad
            //obtengo lo escrito en el textfield localidad
            String texto = loc.getjTextFieldNombre().getText();
            //y lo pongo en el textfield de prov
            pro.getjTextFieldNombre().setText(texto);
        } else if(e.getSource() == pro.getjButtonIndicar()){ //si se hace clic en el boton indicar de la provincia
            String texto = pro.getjTextFieldNombre().getText();
            loc.getjTextFieldNombre().setText(texto);
        }
    }
}

__________________________________________________________________
LOCALIDAD
__________________________________________________________________
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class localidad extends javax.swing.JFrame {
 
    private javax.swing.JButton jButtonIndicar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JTextField jTextFieldNombre;
 
    public localidad() {
        initComponents();
    }
 
public void initComponents(){
     //aqui deberias ubicar el boton, label y textfield en el frame. Te lo dejo abajo para que lo veas.
}
 
    //ESTO ES PARA QUE DESDE MEDIADOR TOMEMOS CONTROL DE LOS CLICs QUE SE HACEN EN ESTA VENTANA
    public void setActionListener(ActionListener lis){
        this.getjButtonIndicar().addActionListener(lis);
    }
 
    //ES PUBLICO PARA ACCEDER DESDE EL MEDIADOR EN EL ACTIONPERFORMED
    public javax.swing.JButton getjButtonIndicar() {
        return jButtonIndicar;
    }
 
    //ES PUBLICO PARA QUE DESDE EL ACTION PERFORMED LO PUEDA MODIFICAR Y OBTENER LO ESCRITO
    public javax.swing.JTextField getjTextFieldNombre() {
        return jTextFieldNombre;
    }
}

__________________________________________________________________
initComponents
__________________________________________________________________
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
 
        jLabel1 = new javax.swing.JLabel();
        jButtonIndicar = new javax.swing.JButton();
        jTextFieldNombre = new javax.swing.JTextField();
 
        jLabel1.setText("Indicar");
 
        jButtonIndicar.setText("Indicar");
 
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(119, 119, 119)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jButtonIndicar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jTextFieldNombre))
                .addContainerGap(62, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextFieldNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButtonIndicar)
                .addContainerGap(53, Short.MAX_VALUE))
        );
 
        pack();
    }// </editor-fold>

__________________________________________________________________
PROVINCIA
__________________________________________________________________

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class provincia extends javax.swing.JFrame {
    public provincia() {
        initComponents();
    }
 
    public void setActionListener(ActionListener lis){
        this.getjButtonIndicar().addActionListener(lis);
    }
 
public void initComponents(){
     //aqui deberias ubicar el boton, label y textfield en el frame. Te lo dejo arriba para que lo veas.
}
 
    private javax.swing.JButton jButtonIndicar;
    private javax.swing.JLabel jLabelNombre;
    private javax.swing.JTextField jTextFieldNombre;
 
    public javax.swing.JButton getjButtonIndicar() {
        return jButtonIndicar;
    }
 
    public javax.swing.JTextField getjTextFieldNombre() {
        return jTextFieldNombre;
    }
}

BUENO BASICAMENTE CON ESO TIENES CONTROL DE 2 VENTANAS DESDE UNA CLASE.
Si puedo te hago un video para que veas mejor, pero te invito a que veas MVC (model view controler) así entiendes un poco mas la estructura que te planteo.

Exiten formas mas faciles de hacer lo que pides pero creo que esta es la mas correcta.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Mandar datos entre JInternalFrames

Publicado por camilo (2 intervenciones) el 13/09/2013 05:49:06
Me ayudaste un montón ya pude solucionarlo, era exactamente eso lo que necesitaba, muschísimas gracias! Sin palabras
Camilo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Mandar datos entre JInternalFrames

Publicado por Octavio Lanzone (74 intervenciones) el 13/09/2013 14:56:49
Camilo, me alegro mucho que solucionaras el problema
Saludos !!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar