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

No funciona .setEnabled

Estas en el tema de No funciona .setEnabled en el foro de Java en Foros del Web. hola tengo 2 ventanas ventana 1 "Principal"(JFrame) ventana 2 "Datos"(Jinternalframe) en la ventana 1 "Princilal" tengo un jMenuBar con su respectivo jMenu 1 en cual ...
  #1 (permalink)  
Antiguo 11/04/2013, 15:09
 
Fecha de Ingreso: febrero-2011
Mensajes: 138
Antigüedad: 13 años, 2 meses
Puntos: 6
Pregunta No funciona .setEnabled

hola tengo 2 ventanas

ventana 1 "Principal"(JFrame)

ventana 2 "Datos"(Jinternalframe)

en la ventana 1 "Princilal" tengo un jMenuBar con su respectivo jMenu 1 en cual inicia en enabled = false;

ahora lo que quiero es que desde la ventana 2 "Datos" pueda habilitarlo de nuevo, probé con este código pero no funciona

Esta ventana 2 "Datos"(jInternalFrame) se muestra dentro de la ventana 1"Principal"

Código Java:
Ver original
  1. //dentro de boton
  2. //ventana "Datos"
  3. Principal p = new Principal();
  4. p.jMenuItem1.setEnabled(true);
  5. this.dispose();

pero no funciona, a que se debera?
__________________
-A veces las cosas pequeñas nos hacen grandes problemas, las cuales no son cosas imposibles de resolver-
  #2 (permalink)  
Antiguo 12/04/2013, 00:28
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: No funciona .setEnabled

No funciona porque los cambios los estás haciendo a un nuevo objeto de la clase Principal, y no al objeto de la clase Principal que ya tienes creado y que es visible.
Al momento de hacer new Principal() en la clase Datos estás creando un nuevo objeto de la clase Principal, no es el que estás viendo como ventana de tu aplicación.
Una solución para tu situación sería implementar el patrón Singleton, te explico: el patrón Singletón nos sirve para crear una y sólo una instancia de una clase para toda nuestra aplicación.
Es bastante simple: primero declaras el constructor de la clase en cuestión (la clase Principal en tu caso) como privado, con esto conseguirás que no puedas crear nuevos objetos de esa clase desde otras clases (o sea, no podrás hacer el new Principal() desde la clase Datos).
Código Java:
Ver original
  1. public class Principal extends javax.swing.JFrame {
  2.  
  3.     //Constructor privado para que no puedan llamarle desde fuera
  4.     private Principal() {
  5.         super();
  6.         //Código de la aplicación
  7.     }
  8.  
  9. }
Ahora hacemos un mecanismo para que cada vez que se necesite una instancia de esa clase, se devuelva siempre el mismo objeto y no uno nuevo.
Crearemos el que será nuestro único objeto como privado (no se podrá acceder a él directamente desde fuera de la clase) y estático.
Código Java:
Ver original
  1. public class Principal extends javax.swing.JFrame {
  2.  
  3.     //Instancia única de la clase
  4.     private static Principal instancia;
  5.  
  6.     //Constructor privado para que no puedan llamarle desde fuera
  7.     private Principal() {
  8.         super();
  9.         //Código de la aplicación
  10.     }
  11.  
  12. }
Y finalmente el método que le da vida al patrón Singleton: hacemos un obtenerInstancia que, en caso sea la primera vez que lo llamemos, instanciará nuestro objeto y nos lo entregará; y en caso no sea la primera vez que lo llamemos, se limitará a darnos el objeto que ya tenemos creado. Este método será público (podremos llamarlo desde fuera) y estático (podemos usar este método sin haber creado una instancia de la clase).
Código Java:
Ver original
  1. public class Principal extends javax.swing.JFrame {
  2.  
  3.     //Instancia única de la clase
  4.     private static Principal instancia;
  5.  
  6.     //Constructor privado para que no puedan llamarle desde fuera
  7.     private Principal() {
  8.         super();
  9.         //Código de la aplicación
  10.     }
  11.  
  12.     public static Principal obtenerInstancia() {
  13.         //Sólo si es la primera vez, instanciamos el objeto    
  14.         if ( instancia == null ) {
  15.             instancia = new Principal();
  16.         }
  17.         //Devolvemos siempre la única instancia que tenemos
  18.         return instancia;
  19.     }
  20.  
  21. }
Y listo, ahora cada vez que necesites una instancia de la clase Principal (obviamente también para abrir la ventana por primera vez para tu aplicación) usarás
Código Java:
Ver original
  1. Principal principal = Principal.obtenerInstancia();
Por ejemplo, y para terminar, desde la clase Datos harías lo siguiente:
Código Java:
Ver original
  1. Principal p = Principal.obtenerInstancia();
  2. p.jMenuItem1.setEnabled(true);
  3. this.dispose();
Si te ha quedado alguna duda, no dudes en dejarla por aquí.
Saludos.

Etiquetas: habilitar
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




La zona horaria es GMT -6. Ahora son las 09:49.