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

Problemas con contador

Estas en el tema de Problemas con contador en el foro de Java en Foros del Web. Hola a todos, soy medio nuevo con java asi q mi pregunta puede resultar un poco boba pero me tiene medio loco. Estoy creando un ...
  #1 (permalink)  
Antiguo 18/07/2012, 13:52
 
Fecha de Ingreso: junio-2010
Mensajes: 168
Antigüedad: 14 años, 5 meses
Puntos: 3
Problemas con contador

Hola a todos, soy medio nuevo con java asi q mi pregunta puede resultar un poco boba pero me tiene medio loco.

Estoy creando un mini juego el cual al presionar un boton un contador resta en una variable, estoy lo estoy haciendo bien siempre y cuando no cambie de ventana. el problema resulto cuando intente que al presionar el boton el programa cambiara de ventana, mostrando los resultados, y luego para volver a jugar el contador se reinicia (este no lo debe hacer ), espero haber sido claro sobre cual es mi problema

mi problema esta en que al iniciar el formulario yo instancio siempre la clase, como hago para no instanciarla nuevamente?

public class form2 extends javax.swing.JFrame {

//aca esta el problema
Espias salud=new Espias();

public form2() {

initComponents();
SaludActual();

}

public void SaludActual(){

int vida=salud.x;

jLabel5.setText(String.valueOf(vida));

}

espero haber sido claro con mi problema, Gracias!
  #2 (permalink)  
Antiguo 18/07/2012, 14:33
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: Problemas con contador

Buenas,

Hay varias soluciones dependiendo de lo que te interese más.

No has puesto el código completo, así que tendré que suponer que cuando abres la otra ventana para ver los resultados, cierras el form2.

Si estoy en lo cierto, en vez de cerrar el form2, podrías ocultarlo llamando a setVisible(false) y cuando quieras volver a mostrarlo poniendo setVisible(true).

Como te he dicho hay más formas, pero esta sería una de ellas.

Saludos.
  #3 (permalink)  
Antiguo 18/07/2012, 14:46
 
Fecha de Ingreso: junio-2010
Mensajes: 168
Antigüedad: 14 años, 5 meses
Puntos: 3
Respuesta: Problemas con contador

hola gracias por tu pronta respuesta, ya lo estoy haciendo asi, pero sigo con el mismo problema, acontinuacion adjunto el codigo

clase principal:

Código PHP:
     int x=30;
            
    public 
int actual(int daño)
    {
       
       
int actual=x-daño;
       
x=actual;
      
       
//System.out.println(x);
       
return x;
    }
          
    
    
    public static 
void main(String[] args) {
        
        
form1 f= new form1();
        
f.setVisible(true);
        
// TODO code application logic here
           //System.out.println("hola mundo");
        
    

Código PHP:


   
private void click(java.awt.event.MouseEvent evt) {
        
// TODO add your handling code here:
      //    form1.this.setVisible(false);
        
form2 f2=new form2();
        
f2.setVisible(true);
        
form1.this.dispose();
           
//form2 f2= new form2();

 
                          
    

Código PHP:

public class form2 extends javax.swing.JFrame {

           
    
Espias salud=new Espias();
    
/**
     * Creates new form form2
     */
    
public form2() {
      
        
initComponents();
        
SaludActual();
        
    }

      public 
void SaludActual(){
         
         
int vida=salud.x;
         
System.out.println(vida);
         
jLabel5.setText(String.valueOf(vida));
                                    
      }
      
            private 
void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        
// TODO add your handling code here:
         
salud.actual(10);
         
SaludActual();
          
form3 f3=new form3();
       
//   f3.setVisible(true);
        //  this.setVisible(false);
         
    

Código PHP:
  public form3() {
        
initComponents();
        
initEstadoActual();
    }

    public 
void initEstadoActual(){
  
      
Espias salud=new Espias();
      
int actualF=salud.x;
        
System.out.println(actualF);
        if(
actualF>0)
            
jLabel1.setText("aun tienes vida puedes seguir jugando");
        else
            
jLabel1.setText("Game Over");
    }
    
   private 
void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
        
// TODO add your handling code here:
        
form2 f2=new form2();
        
f2.setVisible(true);
        
form3.this.dispose();
     
    } 
Aca tengo deshabilitada la opcion para que se oculte la 2nd ventana y aparesca la 3rd el contador funciona corretamente, sin embargo si oculto la 2nd y hago que aparesca la 3 el contador siempre queda en el mismo valor
Espero me puedas ayudar, Gracias!
  #4 (permalink)  
Antiguo 18/07/2012, 15:00
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: Problemas con contador

Buenas,

Veo varios problemas en el código, además de que no entiendo porque en el form3 vuelves a crear la clase Espias.

En el form3 tienes esto:

Código Java:
Ver original
  1. private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
  2.         // TODO add your handling code here:
  3.         form2 f2=new form2();
  4.         f2.setVisible(true);
  5.         form3.this.dispose();
  6.      
  7.     }

Estas creando una nueva instancia del form2, no usando la que ya tienes creada.
Además de que te puede crear problemas de memoria (no estás liberando el form2 que creas antes), no va a tener el comportamiento esperado.

Así lo haría yo:

Código Java:
Ver original
  1. public class form2 extends javax.swing.JFrame {
  2.  
  3.            
  4.     Espias salud=new Espias();
  5.     /**
  6.      * Creates new form form2
  7.      */
  8.     public form2() {
  9.        
  10.         initComponents();
  11.         SaludActual();
  12.          
  13.     }
  14.  
  15.       public void SaludActual(){
  16.          
  17.          int vida=salud.x;
  18.          System.out.println(vida);
  19.          jLabel5.setText(String.valueOf(vida));
  20.                                      
  21.       }
  22.        
  23.             private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
  24.         // TODO add your handling code here:
  25.          salud.actual(10);
  26.           SaludActual();
  27.           form3 f3=new form3(this);
  28.           f3.setVisible(true);
  29.           this.setVisible(false);
  30.          
  31.     }  
  32.  
  33. }

Código Java:
Ver original
  1. public class form3  extends javax.swing.JFrame{
  2.  
  3. private JFrame ventanaPadre;
  4.  
  5.  public form3(JFrame padre) {
  6. ventanaPadre = padre;
  7.         initComponents();
  8.         initEstadoActual();
  9.     }
  10.  
  11.     public void initEstadoActual(){
  12.    
  13. //Tienes que revisar esto, la salud va a ser 0 si creas una nueva instancia
  14.       Espias salud=new Espias();
  15.       int actualF=salud.x;
  16.         System.out.println(actualF);
  17.         if(actualF>0)
  18.             jLabel1.setText("aun tienes vida puedes seguir jugando");
  19.         else
  20.             jLabel1.setText("Game Over");
  21.     }
  22.      
  23.    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
  24.         // TODO add your handling code here:
  25.         padre.setVisible(true);
  26.         this.dispose();      
  27.     }  
  28. }

Puede que no esté correcto del todo, tendrás que amoldarlo a lo que tú tengas.

Saludos.
  #5 (permalink)  
Antiguo 18/07/2012, 15:39
 
Fecha de Ingreso: junio-2010
Mensajes: 168
Antigüedad: 14 años, 5 meses
Puntos: 3
Respuesta: Problemas con contador

gracias por tu ayuda, ahora entiendo q cuando creo la instancia lo que hago es reiniciar el contador ya que creo un objeto nuevo, sin embargo aun no me queda claro como accedo al valor del 2nd form en el 3rd form,

modifique esta linea en el 2nd form.:

f3.setVisible(true);

le agregue el true, pero me saca error

y las modificaciones del form3 no me son muy claras, disculpa mi ignorancia en este punto, como puedo acceder al form2 sin necesidad de crear la instacia?

gracias!
  #6 (permalink)  
Antiguo 18/07/2012, 17:59
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años, 6 meses
Puntos: 69
Respuesta: Problemas con contador

A lo que yo veo en esta parte de tu código, (que repites la misma practica en diversos puntos):

Código Java:
Ver original
  1. private void click(java.awt.event.MouseEvent evt) {
  2.         // TODO add your handling code here:
  3.       //    form1.this.setVisible(false);
  4.         form2 f2=new form2();
  5.         f2.setVisible(true);
  6.         form1.this.dispose();
  7.            //form2 f2= new form2();
  8.  
  9.                            
  10.     }

form2 la estas declarando e instanciando cada y que haces el click en ese frame, por lo tanto, ese tipo de variables, deben de ser de instancia y no locales... Que son las variables de instancia? las que declaras hasta arriba "globales" para toda la clase...

asi en esa parte no defines la variable solo seria f2 = new Form(); .....

Aún asi, puede ser que no debas crear la instancia en ese bloque, creala en otro lado por ejemplo en el constructor de clase y en esa parte del click, lo unico que haces es un f2.setVisible(true)... solo la muestras ya que la tienes creada....

Estando en el form3 para regresar al form2 necesitas pasar un objeto de f2 (ya inicializada) al constructor de f3.. asi en cualquier momento para regresar haces un f3.setVisible(false) y despues miObjetodeF2.setVisible(true), y como vez no crea un "new"....

Todo esto lo puedes evitar diseñando correctamente tu aplicación, se recomienda que JFrame solo debe existir uno, y debe ser el principal de tu aplicación, todas las demás ventanas que requieras deberían ser JDialog... de esta manera el JDialog es un hijo de JFrame asi que en el momento que se quiera regresar al JFrame solo haces un "Dispose" al Dialog...
__________________
De nada, hay te encargo +1...

Etiquetas: clase, contador, programa
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:28.