How to avoid flickering when replacing a panel?
I have a Container that contains a Panel, panelA.
I am simply trying to replace panelA with panelB, but when I run the app, you see (very quickly) panelA being removed, then a grey box, then panelB being added = a lot of flicker.
Can anyone post any code that will replace a panel a bit more smoothly?
Message was edited by:
jhodgski
[365 byte] By [
jhodgskia] at [2007-11-27 11:13:16]

# 1
import java.awt.*;
import java.awt.event.*;
public class PanelReplacement implements ActionListener {
Panel parent;
Panel panelA;
Panel panelB;
public void actionPerformed(ActionEvent e) {
if(panelA.isShowing()) {
parent.remove(panelA);
parent.add(panelB);
} else {
parent.remove(panelB);
parent.add(panelA);
}
parent.validate();
}
private Panel getPanels() {
panelA = getPanelA();
panelB = getPanelB();
parent = new Panel(new BorderLayout());
parent.add(panelA);
return parent;
}
private Panel getPanelA() {
Panel panel = new Panel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = 3;
panel.add(new Label("Panel A"), gbc);
gbc.weighty = 1.0;
gbc.weightx = 1.0;
gbc.gridy = 1;
gbc.gridwidth = 1;
panel.add(new Button("Button" + 1), gbc);
panel.add(new Button("Button" + 2), gbc);
panel.add(new Button("Button" + 3), gbc);
return panel;
}
private Panel getPanelB() {
Panel panel = new Panel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = 2;
panel.add(new Label("Panel B"), gbc);
gbc.weighty = 1.0;
gbc.weightx = 1.0;
gbc.gridy = 1;
gbc.gridwidth = GridBagConstraints.RELATIVE;
panel.add(new Button("Button" + 1), gbc);
gbc.gridwidth = GridBagConstraints.REMAINDER;
panel.add(new Button("Button" + 2), gbc);
gbc.gridy = GridBagConstraints.RELATIVE;
gbc.gridwidth = GridBagConstraints.RELATIVE;
panel.add(new Button("Button" + 3), gbc);
gbc.gridwidth = GridBagConstraints.REMAINDER;
panel.add(new Button("Button" + 4), gbc);
return panel;
}
private Panel getControl() {
Button button = new Button("swap panels");
button.addActionListener(this);
Panel panel = new Panel();
panel.add(button);
return panel;
}
public static void main(String[] args) {
PanelReplacement test = new PanelReplacement();
Frame f = new Frame();
f.addWindowListener(closer);
f.add(test.getPanels());
f.add(test.getControl(), "Last");
f.setSize(400,400);
f.setLocation(200,200);
f.setVisible(true);
}
private static WindowListener closer = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
}