java - maximizado - Invoque un método de un JFrame desde un JInternalFrame sin hacer una nueva instancia
jdialog (2)
No piense en términos de JFrame o JInternalFrame porque si / cuando expande su programa, es probable que no use ninguna clase que amplíe ninguna de estas dos clases. En su lugar, debe ver esto en la luz general de cómo un objeto llama a un método de otro objeto. La solución es que un objeto obtenga una referencia válida para el objeto de interés , tal vez pasando esa referencia a través de un parámetro constructor o método setter. Luego llame a su método público deseado en esa referencia. En este JFrames y Swing no es diferente de cualquier otro programa de Java.
Respecto a,
Leí en otros sitios en Internet que "Invocar" es la solución ...
No, eso no tiene nada que ver con su problema actual, sino con los problemas de enhebrado de Swing, que una vez más no es la razón por la cual su código actual está fallando.
Para obtener más ayuda y una mejor ayuda, considere crear y publicar un sscce .
Tengo un gran problema al hacer esto:
Desde un JFrame, llamo un JInternalFrame, entonces, quiero llamar un método del JF desde el JIF. El problema es que si hago una nueva instancia de este JF, los cambios no se aplican, porque no es la misma instancia original.
Estoy iniciando sesión en este JIF, si las credenciales son correctas, el menú en el JF debe cambiar; de lo contrario, no se debe aplicar ningún cambio.
Leí en otros sitios en Internet que "Invocar" es la solución, pero "Invocar" aparentemente solo funciona con nuevas instancias. ¿Hay alguna otra solución?
¡Gracias a todos por su ayuda!
¡He resuelto el problema!
En general, para llamar a todos mis JInternalFrames utilicé una declaración global general:
private JInternalFrame jif;
Pero para resolver mi problema, declaré un nuevo constructor utilizando directamente la clase de mi JInternalFrame:
private LogInJInternalFrame logIn;
Antes de la llamada, declaro un constructor público global en el Log In JIF:
public MainJFrame mainJF;
Con eso, usando el nuevo constructor en mi JF, pude acceder a todas las declaraciones públicas en mi JIF. Entonces, hice la llamada usando algo como esto:
private void logInCall(){
logIn = new LogInJInternalFrame(); //--New instance of my JIF
logIn.mainJF = this; /*Set the class to the constructor instead to declare a new one*/
logIn.setVisible(true);
}
Después de eso, en mi JIF, cuando las credenciales eran correctas, he usado esto:
mainJF.setNewUserMenu(); /*The class''s instance let me "invoke" the method I''ve wanted*/
Y eso es todo, después de los resultados, todo lo que puedo decir es "Realmente necesito relajarme más y pensar mejor las cosas".
¡¡¡Gracias de nuevo!!!