Java - Pasar datos de Ventana 2 a ventana 1

 
Vista:
sin imagen de perfil

Pasar datos de Ventana 2 a ventana 1

Publicado por vcn288 (5 intervenciones) el 02/08/2017 20:07:43
Hola buen día, tengo un problema respecto a algo parecido en este post:

Se ejecuta primero Ventana 1 (Inventario_NuevoEquipo): Tiene un botón y jTextField(campotecnicas)

(…) Inventario_NuevoEquipo_Ctecnicas inc = new Inventario_NuevoEquipo_Ctecnicas();
campotecnicas.setText(inc.ctecnicas);
(…)

Ventana 2 (Inventario_NuevoEquipo_Ctecnicas): Botón Agregar y jtextarea .

(…) public static String ctecnicas = ” “;
(….) private void button2ActionPerformed(java.awt.event.Ac… evt) {
ctecnicas = txtarea.getText();
this.setVisible(false);
}

Entonces la cosa es que NO aparece EN ventana 1 las características que se tomaron del formulario de ventana 2, en lugar de eso me sale espacio en blanco en el jTextField.

Creo que es porque cuando arranca la ventana de , la variable inc.tecnicas está vacía. ¿Cómo podría arreglarlo? Gracias antemano.
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
Imágen de perfil de Jose
Val: 130
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Pasar datos de Ventana 2 a ventana 1

Publicado por Jose (46 intervenciones) el 03/08/2017 17:27:34
Hola
Citandote:
Creo que es porque cuando arranca la ventana de , la variable inc.tecnicas está vacía.
pues no lo creas asi es XD.

Solución:
Rapida y efectiva, pero no elegante.
Primer paso:
En tu clase ventana 2, creas una variable de tipo ventana 1:
con esa variable ya puedes acceder a un método que llamaremos setCampoTecnica que se utilizara
para establecer un valor a tu jtextfield
Ejemplo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Inventario_NuevoEquipo_Ctecnicas{//ventana 2
public Inventario_NuevoEquipo ventana1;
 
....
 
(.) private void button2ActionPerformed(java.awt.event.Ac… evt) {
 
if(ventana1!=null){//verificamos, para que no se nos cuelgue el programa.
   ventana1.setCampoTecnica( txtarea.getText());//este linea de codigo colocarla, despues de hacer paso 2.
  this.setVisible(false);
}//fin de if
 
}
}

paso 2:
creamos el metodo setCampoTecnica en ventana1:
Ejemplo de implementacion:

1
2
3
4
5
6
7
8
class Inventario_NuevoEquipo_Ctecnicas{//ventana 1
 
public void setCampoTecnica(String valor){
 
campotecnicas.setText(valor);
}
 
}

paso 3:
cambiamos la invocación de ventana 2, para darle memoria a la variable ventana1.
1
2
3
4
5
//Ejemplo: utilizando tu pseudo codigo
 
() Inventario_NuevoEquipo_Ctecnicas inc = new Inventario_NuevoEquipo_Ctecnicas();
inc.ventana1=this;//es this porque supondo que este trozo de codigo esta en ventana1, 
()

La solucion 2: es implementar el patrón observador

te dejo un ejemplo que encontre en la red, que es bastante sencillo de entender:
https://picodotdev.github.io/blog-bitix/2015/10/el-patron-de-diseno-observer-y-una-forma-de-implementarlo-en-java/

Nos cuentas como te fue.

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

Pasar datos de Ventana 2 a ventana 1

Publicado por Vcn288 (5 intervenciones) el 03/09/2017 00:40:33
Usuario Jose, muchas gracias por haberte tomado el tiempo de responder. Tu solución es buena, gracias nuevamente.

Quiero agregar que encontré otra solución un poco más corta:

/* Para abreviar, llamaré FormularioA a lo que era Ventana1(Inventario_NuevoEquipo) y FormularioB a Ventana 2 (Inventario_NuevoEquipo_Ctecnicas). */

FormularioA: Este se ejecuta en primer lugar. Tiene un jTextField1 y un
botón Agregar.

Modificación del jTextField1: Vas a Paleta de Propiedades, en la pestaña Code y cambias Variable, debe quedar así: Public static

Código del botón Agregar:

FormularioB.toFront();
FormularioB.setVisible(true);

// Ahora le doy click al botón Agregar
// El FormularioA sigue abierto en pantalla.


Aparece en escena FormularioB: tiene un jTextArea1 y un botón Enviar.

Código de botón Enviar:

FormularioA.jTextField1.setText(jTextArea1.getText());
this.dispose();

// Le doy click al botón Enviar del FormularioB

Se cierra el FormularioB y queda en pantalla FormularioA (nunca desapareció) con el
texto que se envió de FormularioB.


Veo que este es un problema frecuente, ojalá tu solución y la mía sean útiles a otras personas.

P.D. Usuario Jose, ¿tú sabes si hay forma de guardar un archivo con un nombre dinámico? Por ejemplo: En FormularioA le doy click a un botón X que genera un archivo PDF con el nombre Copia.sql Pero quisiera que hoy se guardara como Copia020917 y mañana Copia030917, y pasado mañana Copia040917, es decir agregue fecha, o un código consecutivo. Estoy en esas ahora.


// ¡Viva la programación!
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
Imágen de perfil de Jose
Val: 130
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Pasar datos de Ventana 2 a ventana 1

Publicado por Jose (46 intervenciones) el 07/09/2017 02:05:53
Hola de nuevo.

sobre tu pregunta: si se puede, solo debes concatenarle la fecha al nombre que le colocaras a tu archivo cuando lo creas.

Te pondré un ejemplo con un archivo de texto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class EscribirFichero {
 
    public static void main(String[] args) throws IOException {
//obtienes la fecha
        int anio=Calendar.getInstance().get(Calendar.YEAR);
       int mes=  Calendar.getInstance().get(Calendar.MONTH);
        int dia=Calendar.getInstance().get(Calendar.DATE);
//creas el nombre del archivo, colocando la fecha (esta puesto asi, para que de el resultado que pones de ejemplo
// Copia040917, pd: si creas más de un archivo en el dia, es recomendable que le pongas la hora.
        String ruta = "archivo"+anio+mes+dia+".txt";
//codigo para crear el archivo
        File archivo = new File(ruta);
        BufferedWriter bw;
        bw = new BufferedWriter(new FileWriter(archivo));
        bw.write("Acabo de crear el fichero de texto.");
 
        bw.close();
    }
 
}

pd:Este código no ha sido probado y solo lo hice a la ligera para fines de aprendizaje.


Ahora, sobre la forma en que resolviste tu problema, cabe recalcar que no es la mejor debido a que hacer una variable estática puede dar como resultado a muchos problemas en una aplicación grande, debido a que puede ser accedido de muchos lugares y modificada lo que es una locura a darle mantenimiento a una aplicación, aparte de lo inflexible que es el código, esto es lo malo en tu solución y en la mía, lo mejor es usar el patrón observador. Pero como te digo para un programa de índole personal, no esta mal tu solución o la mía, pero en un ámbito profesional no es la mejor opción.

bueno te deseo el mejor de los días y éxitos en tu vida.
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