Esperar hasta que formulario termine

Iniciado por leogtz, 27 Noviembre 2010, 05:41 AM

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

leogtz

Hola, tengo un problema, en un botón de mi formulario principal, yo mando a hablar a otro formulario, algo así:

Código (java) [Seleccionar]
private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {                                         
        //new Datos().setVisible(true);
        Datos dat = new Datos();
        dat.setVisible(true);
       
    }   


Funciona bien, abre el formulario y puedo trabajar sobre el, pero el problema está en que yo tengo que esperar que termine el formulario que abrí para de ahí recoger los datos. Pero el código que tengo abre el formulario y continua su ejecución.

¿Alguien sabe como puedo arreglarlo?
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

egyware

Hola, queria preguntarte algo.
Datos dat = new Datos();
Que es exactamente, al parecer es una herencia de Frame o de Dialog.
Si es de Dialog se puede utilizar establecer modal igual a false (setModal(false)) para que no se te pegue ahi.
Ahora si es Frame, por lo que yo se no tiene esa función y necesariamente (para mi desgracia que en la idea me gusta usar pocos Threads lo justo y necesario) crear un nuevo thread que contenga "setVisible(true)" y asi evitas que no se pegue.

Saludos!!

leogtz

Es un frame, egyware. ¿Así que solo puedo usar un thread para esto?
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

egyware

Si al parecer no queda de otra
estuve buscando algo parecido al setModal que tienen los Dialog, pero no encontré nada
http://download.oracle.com/javase/6/docs/api/java/awt/Frame.html

talvez si usas un frame y varios Dialog podrias hacerlos modales onda que esperen hasta que se cierren

mmm creo que entendi mal tu problema, tu quieres que se cierren el formulario y asi sacar los datos? o es otra cosa?

leogtz

Sí, yo quiero que trabaje el segundo formulario y que el primero espere hasta que haya terminado, cuando haya terminado el segundo, recoger los datos desde el primero.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

egyware

cuanto tu cierras la ventana, deberia seguir la ejecución exactamente donde tu hiciste setVisible(true)
por lo menos eso tengo entendido.

Saludos

leogtz

Lo curioso es que sigue la ejecución, pongo un JOptionPane.showMe... y lo muestra instantaneamente al crear el objeto Datos. :(
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

egyware

ahi no se, te sugiero que revises la documentación http://download.oracle.com/javase/6/docs/api/javax/swing/JOptionPane.html

ya yo me retiro por hoy, espero que las respuestas que den la solución
Saludos!!

sapito169

-tu formulario tiene que ser una clase que herede de jdialogo que tenga constructor que reciva un frame y un bolean
-tienes que conocer como trabajar con geters y seters


import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;

public class FrmPrincipal extends JFrame {

private static final long serialVersionUID = 1L;
private JButton jButton = new JButton("presioname");
private JTextField jLabel = new JTextField("respuesat");

public FrmPrincipal() {
intialise();
}

public void intialise() {
jLabel.setBorder(new BevelBorder(BevelBorder.RAISED));
jButton.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
jbuton_actionPerformed(e);
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setLayout(new FlowLayout());
getContentPane().add(jLabel);
getContentPane().add(jButton);

pack();
}

public void jbuton_actionPerformed(ActionEvent e) {
FrmProducto frmData = new FrmProducto(this, true);
frmData.setVisible(true);
String respuesta = frmData.getDato();
jLabel.setText(respuesta);
}

public static void main(String arg[]) {
FrmPrincipal frmPrincipal = new FrmPrincipal();
frmPrincipal.setVisible(true);
}
}



import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class FrmProducto extends JDialog {

private static final long serialVersionUID = 1L;
private JTextField jTextField = new JTextField("ingrese aqui el dato");

public FrmProducto(JFrame frame, Boolean modal) {
super(frame, modal);
initialise();
}

public void initialise() {
getContentPane().add(jTextField);
pack();
}

public String getDato() {
return jTextField.getText();
}
}

leogtz

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com