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

[SOLUCIONADO] Formulario Java Jframe con Jpanel no funciona

Estas en el tema de Formulario Java Jframe con Jpanel no funciona en el foro de Java en Foros del Web. hola, soy novato en cuanto a la programacion de JAVA, actualmente estoy tratando de generar una JFRAME que contiene componentes que ya he acomodado y ...
  #1 (permalink)  
Antiguo 06/12/2013, 16:32
Avatar de GeVi  
Fecha de Ingreso: diciembre-2013
Mensajes: 5
Antigüedad: 10 años, 4 meses
Puntos: 0
Pregunta Formulario Java Jframe con Jpanel no funciona

hola, soy novato en cuanto a la programacion de JAVA, actualmente estoy tratando de generar una JFRAME que contiene componentes que ya he acomodado y demas, entre ellos esta un JLayeredPane para que cargue una clase JPanel que ya he creado anteriormente, en cuanto a esto no tengo problema, lo mando llamar de la siguiente manera

modulo = Class.forName("EWH."+Programa);
Panel = (JPanel) modulo.newInstance();
LayPNL.add((Component) Panel);

lo carga sin problemas, el motivo de mi frustracion es que el JFRAME tiene en memoria un USUARIO y un PERFIL el cual necesito que el JPanel los lea, mas no he podido lograr que esto suceda.

si alguno de ustedes sabe como hacerlo o me pudiera ayudar con una idea mejor de solucionar esta disyuntiba se los agradeceria muchisimo.

saludos
  #2 (permalink)  
Antiguo 07/12/2013, 00:11
Avatar de cyrux_cob  
Fecha de Ingreso: febrero-2007
Mensajes: 28
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Formulario Java Jframe con Jpanel no funciona

Que quieres decir con que el JFRAME tiene en memoria un usuario y un perfil????
  #3 (permalink)  
Antiguo 07/12/2013, 07:32
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Formulario Java Jframe con Jpanel no funciona

Hola:

Entiendo que el JFrame y el Jpane son clases que has hecho, o al menos, habrá un código que instancie ambas y pase la una a la otra. Aquí tienes cómo hacer que dos clases se vean para que una pueda llamar a métodos de la otra, o ver sus atributos http://chuwiki.chuidiang.org/index.p...a_a_otra_clase

Avisa si sigues teniendo problemas.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #4 (permalink)  
Antiguo 07/12/2013, 08:10
Avatar de GeVi  
Fecha de Ingreso: diciembre-2013
Mensajes: 5
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Formulario Java Jframe con Jpanel no funciona

Cyrux, lo que quiero decir con que el jframe tiene un usuario y contraseña es porque mi clase menu inicializo el jframe pasandole valores, lo que necesito es que ese jframe cargue una clase externa por medio de uno de esos valores osease el nombre de la clase. anexo codigo a ver si me explico mejor

este es el JFRAME

package EWH;

import....
/**
*
* @author GerardoV
*/
public class WorkFrame extends javax.swing.JFrame {

/**
* Creates new form WorkFrame
*/

//Variables
String Profile;
String Usuario;
int xLOG = 0;
int yLOG = 0;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int flag = 0;
int screenwidth = screenSize.width;
int screenheigh = screenSize.height;
String programa = "";
String Usu = "";
Class modulo;
Component CPanel;
JPanel Panel;
ImageIcon fondo;
ImageIcon fondotmp;
ImageIcon fondodiv1;
public BufferedImage Imagen_en_memoria;
Graphics2D g2;
String Template;
//public final Object Icono;
//public final Object Nombre;

public WorkFrame(String Template, String Programa, String Usuario, String Profile) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
//super("WorkFrame");
this.Template = Template;
this.programa = Programa;
this.Usuario = Usuario;
this.Profile = Profile;
initComponents();
mover mml = new mover(eSipoLogo);
eSipoLogo.addMouseListener(mml);
eSipoLogo.addMouseMotionListener(mml);
DivisionLBL.addMouseListener(mml);
DivisionLBL.addMouseMotionListener(mml);
fondodiv1 = new ImageIcon(getClass().getResource("/Recursos/DivBorde.png"));
DivisionLBL.setIcon(fondodiv1);
if((Template == null) || (Template.equals("")) || (Template.equals(" ")) ){Template="PLAIN";}
System.out.println("Template es: "+Template);
fondotmp = new ImageIcon(getClass().getResource("/Recursos/"+Template+"/Fondo1.jpg"));
FondoLBL.setIcon(fondotmp);
this.setTitle(Programa);
System.out.println("la clase es : "+programa);
--->modulo = Class.forName("EWH."+Programa);
--->Panel = (JPanel) modulo.newInstance();
--->LayPNL.add((Component) Panel);
this.repaint();
this.validate();
//this.setBounds(0, 0, 1024, 800);
}





public String getUsuario()
{
return Usuario;
}
public String getProfile()
{
return Profile;
}

/**
* @param args the command line arguments
*/
public static void main(final String Template, final String Programa, final String Usuario, final String Profile) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClass Name());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(WorkFrame.class .getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(WorkFrame.class .getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(WorkFrame.class .getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(WorkFrame.class .getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>

/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
try{
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
}catch(Exception e){}
WorkFrame thisClass = null;
try {
thisClass = new WorkFrame(Template, Programa, Usuario, Profile);
} catch (ClassNotFoundException ex) {
Logger.getLogger(WorkFrame.class.getName()).log(Le vel.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(WorkFrame.class.getName()).log(Le vel.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(WorkFrame.class.getName()).log(Le vel.SEVERE, null, ex);
}
thisClass.setDefaultCloseOperation(JFrame.DISPOSE_ ON_CLOSE);
thisClass.setVisible(true);

try {
@SuppressWarnings("rawtypes")
Class clazz = Class.forName("com.sun.awt.AWTUtilities");
@SuppressWarnings("unchecked")
Method method = clazz.getMethod("setWindowOpaque", java.awt.Window.class, Boolean.TYPE);
method.invoke(clazz,thisClass , false);
} catch (Exception e)
{ }


}
});
}

// Variables declaration - do not modify
private javax.swing.JLabel DivisionLBL;
private javax.swing.JLabel FondoLBL;
private javax.swing.JLayeredPane LayPNL;
private javax.swing.JButton LogOutBTN;
private javax.swing.JButton MaximizarBTN;
private javax.swing.JButton MinimizarBTN;
private javax.swing.JPanel TitlePNL;
private javax.swing.JLabel eSipoLogo;
private javax.swing.JPanel jPanel1;
// End of variables declaration
}
  #5 (permalink)  
Antiguo 07/12/2013, 08:12
Avatar de GeVi  
Fecha de Ingreso: diciembre-2013
Mensajes: 5
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Formulario Java Jframe con Jpanel no funciona

y este es uno de los JPANEL que puedo mandar llamar

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/

package EWH;

import java.awt.*;
import java.sql.*;
import javax.swing.*;
import static javax.swing.Spring.sum;
import EWH.WorkFrame;


/**
*
* @author GerardoV
*/
public class CAMBIATE extends javax.swing.JPanel{

/**
* Creates new form CAMBIATE
*/

/// VARIABLES DE CONEXION
Conexion Conexion = new Conexion();
Conexion Conexion2 = new Conexion();
ResultSet resultadoTEMP = null;



///

/// VARIABLES
String CveTema;
String NomTema;
String Usuario;
String Usu;
String Profile;
///

public CAMBIATE() {
//WorkFrame.
//super(WorkFrame);
String Clase = super.getClass().toString();
//this.Profile = Profile;
Conexion.Conexion();
initComponents();
System.out.println("Usu es: "+Clase);
/// IDENTIFICA TEMA ACTUAL
try
{
resultadoTEMP=Conexion.sConexion.executeQuery("SEL ECT eswtecod From [email protected] WHERE ESUSRKEY = '"+Usuario+"'");
while (resultadoTEMP.next())
{
System.out.println("Usu2 es: "+Usuario);
TemaLBL.setText(resultadoTEMP.getString(1));
//NomTema = resultadoTEMP.getString(2);
}
//resultadoTEMP.close();

}catch(Exception err){System.out.println("TEMERROR: conexion "+err);}

///
/// LLENA EL COMBO DE TEMAS
//ComboTema.removeAllItems();
ComboTema.removeAll();
ComboTema.addItem(" - ");
try
{ //System.out.println("sql es: "+SQL);
resultadoTEMP=Conexion.sConexion.executeQuery("SEL ECT ESWTECOD, ESWTENAM From [email protected]");
while (resultadoTEMP.next())
{
CveTema = resultadoTEMP.getString(1);
NomTema = resultadoTEMP.getString(2);
ComboTema.addItem(CveTema+" - "+NomTema);
}
resultadoTEMP.close();

}catch(Exception err){System.out.println("TEMERROR: conexion "+err);}

///

}

/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jLabel1 = new javax.swing.JLabel();
TemaLBL = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
ComboTema = new javax.swing.JComboBox();
PreviewLBL = new javax.swing.JLabel();

setForeground(new java.awt.Color(255, 255, 255));
setOpaque(false);

jLabel1.setForeground(new java.awt.Color(255, 255, 255));
jLabel1.setText("Template Actual: ");

TemaLBL.setForeground(new java.awt.Color(255, 255, 255));
TemaLBL.setText("Template");

jLabel3.setForeground(new java.awt.Color(255, 255, 255));
jLabel3.setText("Lista de Templates");

ComboTema.setForeground(new java.awt.Color(255, 255, 255));
ComboTema.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
ComboTemaItemStateChanged(evt);
}
});

PreviewLBL.setForeground(new java.awt.Color(255, 255, 255));
PreviewLBL.setText("Preview");
PreviewLBL.setVerticalAlignment(javax.swing.SwingC onstants.TOP);
PreviewLBL.setHorizontalTextPosition(javax.swing.S wingConstants.LEFT);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.G roupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.G roupLayout.Alignment.LEADING)
.addComponent(jLabel1)
.addComponent(jLabel3))
.addGap(45, 45, 45)
.addGroup(layout.createParallelGroup(javax.swing.G roupLayout.Alignment.LEADING, false)
.addComponent(ComboTema, 0, 172, Short.MAX_VALUE)
.addComponent(TemaLBL, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addComponent(PreviewLBL))
.addContainerGap(393, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout .Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.G roupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(TemaLBL))
.addGap(24, 24, 24)
.addGroup(layout.createParallelGroup(javax.swing.G roupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(ComboTema, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(26, 26, 26)
.addComponent(PreviewLBL)
.addContainerGap(404, Short.MAX_VALUE))
);
}// </editor-fold>

private void ComboTemaItemStateChanged(java.awt.event.ItemEvent evt) {
System.out.println("Cambio item selecionado a "+ComboTema.getSelectedItem());
if(ComboTema.getSelectedItem().toString().equals(" - ")){}
else{
ImageIcon fondon = new ImageIcon(getClass().getResource("/Recursos/"+ComboTema.getSelectedItem().toString().substring (0, 5)+".jpg"));
String ruta = "/Recursos/"+ComboTema.getSelectedItem().toString().substring (0, 5)+".jpg";
PreviewLBL.setIcon(fondon);
}
}


// Variables declaration - do not modify
private javax.swing.JComboBox ComboTema;
private javax.swing.JLabel PreviewLBL;
private javax.swing.JLabel TemaLBL;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel3;
// End of variables declaration
}

lo ke necesito es ke el JPANEL pueda leer los valores que tiene el JFRAME y que se comuniquen entre si
  #6 (permalink)  
Antiguo 07/12/2013, 10:46
Avatar de cyrux_cob  
Fecha de Ingreso: febrero-2007
Mensajes: 28
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Formulario Java Jframe con Jpanel no funciona

Para serte sincero no he estudiado muy a fondo la clase "Clase", pero creo que te pudiera resultar declarar Profile y Usuario como static en la clase WorkFrame , es decir como "variables de clases" como se conocen y luego llamarla desde dentro de los paneles .

//Dentro de la clase panel
this.profile = WorkFrame.Profile;
this.usuario = WorkFrame.Usuario;
  #7 (permalink)  
Antiguo 07/12/2013, 15:22
Avatar de cyrux_cob  
Fecha de Ingreso: febrero-2007
Mensajes: 28
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Formulario Java Jframe con Jpanel no funciona

Saludos.
Lo que te puse más arriba funciona pues lo probé. Estuve estudiando la clase Class y creo que encontré una solución mas factible para lo que deseas.
Primero deberas modificar el constructor de los paneles, y agregarle los parámetros que deseas que "sepan" de la clase WorkFrame.

Por ejemplo

Código Java:
Ver original
  1. public CAMBIATE(String _profile, String _user) {
  2.              profile = _profile;
  3.              usuario = _user;
  4.  
  5. //Aquí va el resto del código
  6. }
  7. }

Luego en la clase WorkFrame modificar la forma en que instancias el objeto Jpanel de la siguiente forma.

Código Java:
Ver original
  1. public class WorkFrame extends javax.swing.JFrame {
  2.  
  3.   String profile;
  4.   String usuario;
  5.   Class modulo;
  6.   Constructor constructorPanel;
  7.   JLayeredPane LayPNL;
  8.  Constructor constructorPanel;
  9.  
  10.  
  11.       profile = _profile;
  12.       usuario = _usuario;
  13.       modulo = Class.forName("EWH."+Programa");
  14.      constructorPanel = modulo.getConstructor(String.class,String.class); // Aquí añades cuantos parametros quieres que tus paneles "conozcan"
  15.      Panel= (JPanel)constructorPanel.newInstance(profile,usuario);
  16.      LayPNL = new JLayeredPane();
  17.      LayPNL.add((Component)Panel,new Integer(1));
  18.      getContentPane().add(LayPNL);
  19.  
  20. }

No sé si me haya equivocado con el nombre de algún objeto al pasar el código para aquí, pero la idea está en utilizar la clase Constructor para instanciar los paneles, pasándole los argumenos que te interesan.
Yo los probé en un ejemplo sencillo y funcionó bien.

me dices como te fue

Última edición por cyrux_cob; 07/12/2013 a las 15:29
  #8 (permalink)  
Antiguo 09/12/2013, 09:01
Avatar de GeVi  
Fecha de Ingreso: diciembre-2013
Mensajes: 5
Antigüedad: 10 años, 4 meses
Puntos: 0
De acuerdo Respuesta: Formulario Java Jframe con Jpanel no funciona

Cita:
Iniciado por cyrux_cob Ver Mensaje
Saludos.
Lo que te puse más arriba funciona pues lo probé. Estuve estudiando la clase Class y creo que encontré una solución mas factible para lo que deseas.
Primero deberas modificar el constructor de los paneles, y agregarle los parámetros que deseas que "sepan" de la clase WorkFrame.

Por ejemplo

Código Java:
Ver original
  1. public CAMBIATE(String _profile, String _user) {
  2.              profile = _profile;
  3.              usuario = _user;
  4.  
  5. //Aquí va el resto del código
  6. }
  7. }

Luego en la clase WorkFrame modificar la forma en que instancias el objeto Jpanel de la siguiente forma.

Código Java:
Ver original
  1. public class WorkFrame extends javax.swing.JFrame {
  2.  
  3.   String profile;
  4.   String usuario;
  5.   Class modulo;
  6.   Constructor constructorPanel;
  7.   JLayeredPane LayPNL;
  8.  Constructor constructorPanel;
  9.  
  10.  
  11.       profile = _profile;
  12.       usuario = _usuario;
  13.       modulo = Class.forName("EWH."+Programa");
  14.      constructorPanel = modulo.getConstructor(String.class,String.class); // Aquí añades cuantos parametros quieres que tus paneles "conozcan"
  15.      Panel= (JPanel)constructorPanel.newInstance(profile,usuario);
  16.      LayPNL = new JLayeredPane();
  17.      LayPNL.add((Component)Panel,new Integer(1));
  18.      getContentPane().add(LayPNL);
  19.  
  20. }

No sé si me haya equivocado con el nombre de algún objeto al pasar el código para aquí, pero la idea está en utilizar la clase Constructor para instanciar los paneles, pasándole los argumenos que te interesan.
Yo los probé en un ejemplo sencillo y funcionó bien.

me dices como te fue

cyrux mereces una reverencia, muchisimas gracias, porfin funciono este mugrero jajajaja ya puedo continuar, espero no atorarme mas y poder terminar la aplicacion. ya se las mostrare un dia de estos :P muchas gracias de nuevo, excelente foro y usuarios. me andare mas por aki

saludos

Etiquetas: argumentos, jframe, jpanel, variables
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 01:08.