The following code shown below will add 3 JLabels to a JFrame and then remove the 3 JLabels. After 2 seconds it will repaint back the 3 JLabels.
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class RepaintFrameTest extends JFrame {
private JPanel panel = new JPanel();
private JLabel labelOne = new JLabel("label1");
private JLabel labelTwo = new JLabel("label2");
private JLabel labelThree = new JLabel("label3");
public RepaintFrameTest() {
panel.add(labelOne);
panel.add(labelTwo);
panel.add(labelThree);
add(panel);
pack();
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(1024,768);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String args[]) {
RepaintFrameTest frameOne = new RepaintFrameTest();
frameOne.getContentPane().removeAll();
frameOne.getContentPane().validate();
frameOne.getContentPane().repaint();
new Thread(new RepaintThread()).start();
}
}
class RepaintThread implements Runnable {
@Override
public void run() {
try {
Thread.sleep(2000);
}catch (InterruptedException interruptedException) {
System.out.println( "Thread is interrupted when it is sleeping" +interruptedException);
}
RepaintFrameTest frameTwo = new RepaintFrameTest();
frameTwo.getContentPane().validate();
frameTwo.getContentPane().repaint();
}
}
A slight problem I faced is that it's repainting to a new frame(frameTwo) instead of an old one(frameOne).
How do I make it such that it will repaint the existing frame instead of repainting to a new one?