
Invisible components not taking up space
Hi,
It's my understanding that the default hidemode treats invisible components as if they were visible in terms of layout. Why, then, does the following testcase behave differently when "verticalFill1" is invisible?
Code:
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import net.miginfocom.layout.CC;
import net.miginfocom.layout.LC;
import net.miginfocom.swing.MigLayout;
public class Testcase extends JLayeredPane
{
public Testcase()
{
setPreferredSize(new Dimension(800, 600));
addComponentListener(new ComponentAdapter()
{
@Override
public void componentResized(ComponentEvent e)
{
Dimension newSize = e.getComponent().getSize();
for (int i = 0, size = getComponentCount(); i < size; ++i)
{
Component component = getComponent(i);
component.setSize(newSize);
if (component instanceof JComponent)
((JComponent) component).revalidate();
}
}
});
JPanel consoleBarLayer = new JPanel(new MigLayout(new LC().debug(1000)));
add(consoleBarLayer);
JPanel verticalFill1 = new JPanel();
// verticalFill1.setVisible(false);
consoleBarLayer.add(verticalFill1, new CC().push().grow().wrap());
JPanel consoleBar = new JPanel();
consoleBar.setBackground(Color.RED);
consoleBarLayer.add(consoleBar, new CC().grow());
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JComponent mainPanel = new Testcase();
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setVisible(true);
}
});
}
}
Thanks,
Gili