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);

}

};

}

crwooda at 2007-7-29 13:59:47 > top of Java-index,Desktop,Core GUI APIs...