No consigo pintar un panel en un JFrame

qwerty
25 de Enero del 2006
Hola a todos, estoy trabajando con swing y tengo un problema que no se como resolver. Tengo en un JFrame un panel con dos botones y cuando pulso cualquiera de los dos botones lo que quiero es que ese panel se elimine y se muestre otro nuevo panel. Lo que tengo hecho es una funcion dentro de mi JFrame que hace lo siguiente.
[code]
//panel es el panel que se muestra al principio y ya esta creado
//panel2 es el panel que quiero mostrar y tambien esta creado

public void cambio()
{
remove(panel);
getContentPane().add(panel2, BorderLayout.CENTER);
panel2.repaint();
}
[/code]
Me compila bien pero no funciona bien, el panel que borro lo elimina pero el segundo no lo pinta, solo lo pinta cuando redimensiono la ventana. Alguien me podria ayudar??

Muchas gracias

Alejandro
25 de Enero del 2006
Alguien tiene alguna solucion al respecto ??? Gracias.

x
25 de Enero del 2006
prueba a hacer el repaint sobre el frame, en lugar del panel

makibar
25 de Enero del 2006
Un ejemplo muy simple de cambio de panel:


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CambioPanel {

public static void main(String[] args) {
final JFrame frame = new JFrame("Cambio Panel");

JButton button = new JButton("change");

final Container container = new Container();
container.setLayout(new BorderLayout());

frame.getContentPane().add(button, BorderLayout.PAGE_START);
frame.getContentPane().add(container, BorderLayout.CENTER);

final JPanel panelRed = new JPanel() {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
super.setBackground(Color.RED);
g.drawString("red panel", this.getWidth()/2, this.getHeight()/2);
}
};
panelRed.setName("panelRed");

final JPanel panelBlue = new JPanel() {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
super.setBackground(Color.BLUE);
g.setColor(Color.YELLOW);
g.drawString("blue panel", this.getWidth()/2, this.getHeight()/2);
}
};
panelBlue.setName("panelBlue");

container.add(panelRed, BorderLayout.CENTER);

button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
String previous = container.getComponent(0).getName();
container.removeAll();
if (previous.equals("panelRed")) {
container.add(panelBlue, BorderLayout.CENTER);
panelBlue.repaint();
container.validate();
} else {
container.add(panelRed, BorderLayout.CENTER);
panelRed.repaint();
container.validate();
}
}
});

frame.setSize(200, 150);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
EventQueue.invokeLater(new Runnable() {
public void run() {
frame.setVisible(true);
}
});
}
}

Alejandro
25 de Enero del 2006
Yo lo hago con :
panel.removeAll();
// codigo para cambiar los componentes de dicho
// panel
panel.revalidate();

y me pasa exactamente lo mismo.
A que se puede deber ???