No consigo pintar un panel en un JFrame
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
[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
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);
}
});
}
}
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);
}
});
}
}