Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: cardiobeta en 16 de Febrero 2013, 02:03
-
Hola a todos. Tengo una clase llamada Inicio en la cual, a traves del metodo initCimponents se crea un JTabbedPaned y se adiciona un panel1 donde se crean todos sus componentes (Jlabel y JTextfield, etc) y un Panel llamado Panel2. Cuando hago click en el Panel2 se llama a una clase llamada Evaluacion. El asunto es que no puedo en esta ultima clase crear un metodo para generar los distintos componentes de dicho panel2. Gracias por la ayuda.
-
¿Por qué quieres agregar esos componentes desde la clase Evaluacion y no desde la clase donde defines el panel? ¿Puedes poner el código para verlo?
-
El asunto es que quiero ir adicionando componentes al panel en forma dinámica. Tengo 2 clases: una que es la clase principal que se llama inicio (en ella el metodo initComponents diseña los componentes del panel0 y en la clase llamada Evaluacion quiero adicionar los componentes del panel1. El codigo que crea el panel 1 en inicio es el siguiente:
JPanel panel1 = new JPanel();
panel1.setBorder(BorderFactory.createTitledBorder(""));
panel1 = new Evaluacion();
pestaña.addTab("Evaluacion clinica", panel1);
Ahora en la clase evaluacion el codigo es el siguiente:
class Evaluacion extends JPanel {
private javax.swing.JLabel jLabel1;
private java.awt.Panel panel1;
public Evaluacion() {
try{
diseñar();
} catch (Exception ev){
}
}
private void diseñar() {
Label label21 = new Label();
label21.setFont(new java.awt.Font("DejaVu Sans", 1, 24));
label21.setText("Fecha:");
label21.setBounds(0,100,20,20);
label21.setVisible(true) ;
System.out.println("Hasta aqui todo bien");
panel1.add(label21);
}
}
El System.out.printin lo puse para ver donde estaba el error. Cuando ejecuto el codigo en el panel 1 no aparece el label pero si el "Hasta aqui todo bien", osea que el error esta en panel1.add(label21). Gracias por el interes y disculpa lo tarde en repicar.
-
Aquí tienes un ejemplo de cómo modificar un panel desde otra clase distinta a aquella en la que se crea, a ver si te sirve:
Clase donde se crea el JPanel:
import java.awt.*;
import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
//Ejemplo para post foro aprenderaprogramar.com
public class DemoJTabbedPane extends JFrame {
// configurar GUI
public DemoJTabbedPane() {
super( "Demo de JTabbedPane " );
// crear objeto JTabbedPane
JTabbedPane panelConFichas = new JTabbedPane();
// establecer pane11 y agregarlo al objeto JTabbedPane
JLabel etiqueta1 = new JLabel( "panel uno", SwingConstants.CENTER );
JPanel panel1 = new JPanel();
panel1.add( etiqueta1 );
panelConFichas.addTab( "Ficha uno", null, panel1, "Primer panel" );
// establecer panel2 y agregarlo al objeto JTabbedPane
JLabel etiqueta2 = new JLabel( "panel dos", SwingConstants.CENTER );
final JPanel panel2 = new JPanel();
panel2.setBackground( Color.YELLOW );
panel2.add( etiqueta2 );
panelConFichas.addTab( "Ficha dos", null, panel2, "Segundo panel" );
panel2.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
System.out.println("Has hecho click sobre el panel");
Evaluacion ev = new Evaluacion();
ev.cambiarColor(panel2);
}
});
// establecer panel3 y agregarlo al objeto JTabbedPane
JLabel etiqueta3 = new JLabel( "panel tres" );
JPanel panel3 = new JPanel();
panel3.setLayout( new BorderLayout() );
panel3.add( new JButton( "Norte" ), BorderLayout.NORTH );
panel3.add( new JButton( "Oeste" ), BorderLayout.WEST );
panel3.add( new JButton( "Este" ), BorderLayout.EAST );
panel3.add( new JButton( "Sur" ), BorderLayout.SOUTH );
panel3.add( etiqueta3, BorderLayout.CENTER );
panelConFichas.addTab( "Ficha tres", null, panel3, "Tercer panel" );
// agregar objeto JTabbedPane al contenedor
getContentPane().add( panelConFichas );
setSize( 250, 200 );
setVisible( true );
} // fin del constructor
public static void main( String args[] )
{
DemoJTabbedPane demoPanelConFichas = new DemoJTabbedPane();
demoPanelConFichas.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
} // fin de la clase DemoJTabbedPane
Clase donde se modifica el JPanel:
import java.awt.*;
import javax.swing.*;
public class Evaluacion {
private int x;
//Constructor
public Evaluacion() {
x = 0;
}
public void cambiarColor(JPanel panelRecibido) {
if (panelRecibido.getBackground() == Color.YELLOW) {
panelRecibido.setBackground( Color.GREEN );
}
else {panelRecibido.setBackground( Color.YELLOW );}
}
}
-
Gracias por la respuesta. Tu sugerencia me permitio resolver el problema. Ahora cuando adiciono el label aparece en posicion central y en la parte superior. No se porque pasa eso aun cuando en el diseño del JLabel aparece donde debe crearse. ¿Alguna idea?.
-
Puede que sea debido a que se trate de otro objeto y no el que tú estás suponiendo que es, tendría que ver el código
-
Ya lo resolvi. Lo que pasa es que el diseño predeterminado de los jPanel es FlowLayout. Leyendo y averiguando en la red pude conocer que lo que tenia que hacer es poner null el diseño y asi se pueden colocar los objetos que uno desee en cualquier posición. Para anular el Flowlayout sencillamente en la clase que construye el panel1 (es decir Inicio) escribí: panel1.setLayout(null); De esta manera puedo adicionar el jLabel y cualquier componente en cualquier ubicación dentro del jPanel. Nuevamente gracias por todo y espero que esto sirva a otros por si llegan a tener la misma dificultad.