Algunas preguntas sobre la Interfaz Grafica en Java.

Iniciado por Coke951, 28 Mayo 2015, 07:55 AM

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

Coke951

Que tal, recientemente comencé a abordar el tema de las interfaces gráficas con swing y awt y bueno, tengo varias dudas que realmente me surgieron y no encontré quien me los pudiera responder, espero aqui se solucione mi problema.

Lo primero, queria crear una ventana de dialogo, como por ejemplo los JOptionPane, utilizo netBeans, asi que es facil, mi problema es que no logro hacer que mi programa abra las ventanas con una secuencia, por ejemplo, hice 4 ventanas, las ventanas deberian de aparecer en orden, primero la ventana 1 y despues la ventana 2, y después seguir con las demás siempre y cuando en la ventana el usuario presionara el botón de aceptar o siguiente, mi problema era que aparecen las 4 al mismo tiempo, Java no esperaba a que primero terminara de ejecutar la primera ventana y al darle aceptar  siguiente, lo que hacia era que el boton aceptar simplemente o me ocultaba la ventana o un System.exit(0). En cambio con las ventanas de JOptionPane siguen un orden y terminan su ejecución o se ocultan cuando das a aceptar o cancelar, eso esta maravilloso.

Quizás lo que pregunte es muy tonto, estoy empezando, si la pregunta que hago es muy trivial, mejor recomienden me un buen libro que abarque este tema a profundidad de preferencia en español.

Otra pregunta, he escuchado hablar de los patrones de diseño, en teoría me deberían de solucionar mi problema, pero existen muchos, investigue sobre el modelo vista controlador, pero existen muchos ejemplos en donde utilizan base de datos entre otras cosas mucho mas avanzadas para mi, ¿ustedes me recomiendan mvc solamente para trabajar con interfaces gráficas?

De antemano, gracias.

nolasco281

Hola no entendí muy bien tu pregunta en vez de usar

Código (java) [Seleccionar]
System.exit(0)

Puedes usar .dispose()

ya que el exit te cierra totalmente el programa, en cuanto a que te abre todas las ventanas de un solo, puede que las estés llamando todas al mismo tiempo, si tiene un botón puedes usar el evento clik para que te cierre en la ventana que está abierta y abrir la que sique.

En seudo código sería algo como

Código (java) [Seleccionar]
evento clik
{
    nombreDeTuInterfaz.Dispose();
    NombreDeLaInterfazAAbrir.show();
}


Disculpa no tengo netBeans instalado para darte un ejemplo mejor.

Saludos.
Lo que se puede imaginar... se puede programar.

.rn3w.

tienes que ir dando una secuencia vos!!!

deberias postear algo de codigo!!!

una cosa mas swing ya murio o solo es para desarrollos universitarios deberias ir probando javaFX

Coke951

Uff, pues mira, soy bastante malo, tengo demasiadas dudas, pero ahi te va la primera.

En lo que mas me confundo es en el manejo de ventanas, hice este ejemplo bastante sencillo con netBeans.

Tengo mi clase principal la cual tiene este codigo solamente:


package manejoventanas;
import Ventanas.VentanaPrincipal;

public class Principal {

    public static void main(String[] args) {
        VentanaPrincipal venP = new VentanaPrincipal();
        venP.setLocationRelativeTo(null);
        venP.setFocusable(true);
        venP.setVisible(true);
    }
   
}


Ahora, Tengo la VentanaPrincipal que es un JFrame y es asi:


como podrás ver, solo tiene un botón el cual ejecuta este código:
   
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        Ventana1 ven1 = new Ventana1();
        ven1.setLocationRelativeTo(null);
        ven1.setVisible(true);
        this.dispose();
}       


Prácticamente lo que intento hacer es que al momento de darle click en "Mostrar la ventana 1", vaya a la ventana 1 y cierre la ventana en la que estaba, como ir hacia delante, mi duda es si esto es correcto, es la mejor forma de hacerlo?

Ahora, al momento de ir a la ventana1 es un JFrame aparecerá algo así:


y el botón ejecuta esto:

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        Ventana2 ven2 = new Ventana2();
        ven2.setLocationRelativeTo(null);
        ven2.setVisible(true);
        this.dispose();
       
    }


Ahi estoy haciendo lo mismo para avanzar a la ventana 2 es un JFrame, estoy creando una nueva ventana y luego estoy utilizando this.dispose() para cerrar la ventana actual y avanzar.
Tengo otra ventana 2, en la que solo tiene 1 boton, exactamente igual que en la anterior con la diferencia de que ese botón va a la ventana principal, osea la primera que aparecio al ejecutar el programa, el boton de la ventana 2 ejecutaria esto:


    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        VentanaPrincipal venP = new VentanaPrincipal();
        venP.setLocationRelativeTo(null);
        venP.setVisible(true);
        this.dispose();
    }


Como ves, ahí estaría creando una NUEVA ventana principal para poder acceder a la ventana principal a través de botones, imaginando que yo agregaría información en la ventana principal como por ejemplo, nombre y usuario, etc, entonces se perdería dicha información por que al volver a la ventana principal por que estoy creando una nueva, no se si realmente logre explicarme.

Como dije arriba, he escuchado hablar del modelo vista controlador, no se si esto realmente me ayude con mi problema o mas bien duda de como hacerlo, o existe alguna forma de hacer esto de forma ordenada.

Existen soluciones como por ejemplo el jpanel desk o algo asi, pero es bastante feo.
He estado investigando, y recomiendan que solo exista un JFrame el cual seria la ventana principal y que los demás sean JDialogs que seria como por ejemplo la ventana 1 y ventana 2, no se si realmente esta sea la solución y que tanta diferencia hay entre un jframe a un jdialog.

Tengo muchas dudas sobre las interfaces gráficas, pero creo que esta es la que mas peso tiene y creo que si logro comprender como debería de funcionar esto correctamente posiblemente solucione las demás por mi cuenta.

Lo siento mucho si no logre explicarme correctamente, de antemano, Gracias por intentar ayudarme, el próximo semestre tendré clases de patrones de diseño, ahora mismo estoy de vacaciones y realmente quiero aprender sobre esto, nunca antes he programado, Java es mi primer lenguaje de programación y realmente me gusto, pero esto de interfaces gráficas... para mi son un dolor de cabeza haha.

Gracias de antemano, Saludos