JPanel's child components paint/layout problem
- by Tom Brito
I'm having a problem that when my frame is shown (after a login dialog) the buttons are not on correct position, then in some miliseconds they go to the right position (the center of the panel with border layout).
When I make a SSCCE, it works correct, but when I run my whole code I have this fast-miliseconds delay to the buttons to go to the correct place.
Unfortunately, I can't post the whole code, but the method that shows the frame is:
public void login(JComponent userView) {
centerPanel.removeAll();
centerPanel.add(userView);
centerPanel.revalidate();
centerPanel.repaint();
frame.setVisible(true);
}
What would cause this delay to the panel layout? (I'm running everything in the EDT)
-- update
In my machine, this SSCCE shows the layout problem in 2 of 10 times I run it:
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class TEST {
public static void main(String[] args) throws Exception {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
System.out.println("Debug test...");
JPanel btnPnl = new JPanel();
btnPnl.add(new JButton("TEST"));
JFrame f = new JFrame("TEST");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().setLayout(new BorderLayout());
f.getContentPane().add(btnPnl);
f.pack();
f.setSize(800, 600);
f.setVisible(true);
System.out.println("End debug test!");
}
});
}
}
The button first appers in the up-left, and then it goes to the center.
Please, note that I'm understand, not just correct. Is it a java bug?
--update
OK, so the SSCCE don't show the problem with you that tried till now.
Maybe it's my computer performance problem. But this don't answer the question, I still think Java Swing is creating new threads for make the layout behind the scenes.