FlowLayout not displaying components while GridLayout does?
java, layout-manager, swing
Solution
1) `FlowLayout` pretty accepting `PreferredSize` that came from `JComponent`, each of `JComponents` can have got different `Dimension` on the screen
example (uncomnent `getMinimumSize` & `getMinimumSize`)
import java.awt.*;
import javax.swing.*;
public class CustomComponent extends JFrame {
private static final long serialVersionUID = 1L;
public CustomComponent() {
setTitle("Custom Component Test / BorderLayout");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
}
public void display() {
add(new CustomComponents0(), BorderLayout.NORTH);
add(new CustomComponents0(), BorderLayout.CENTER);
add(new CustomComponents0(), BorderLayout.SOUTH);
add(new CustomComponents0(), BorderLayout.EAST);
pack();
// enforces the minimum size of both frame and component
setMinimumSize(getMinimumSize());
setPreferredSize(getPreferredSize());
setVisible(true);
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
CustomComponent main = new CustomComponent();
main.display();
}
};
javax.swing.SwingUtilities.invokeLater(r);
}
}
class CustomComponents0 extends JLabel {
private static final long serialVersionUID = 1L;
/*@Override
public Dimension getMinimumSize() {
return new Dimension(200, 100);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 200);
}*/
@Override
public void paintComponent(Graphics g) {
int margin = 10;
Dimension dim = getSize();
super.paintComponent(g);
g.setColor(Color.red);
g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2);
}
}
2) `GridLayou`t create proportional area for every `JComponents`, then accepting only `JComponent` that have got larger `Dimnesion` came from `PreferredSize`
3) for `GridLayout` I'm talking about method `pack()`, not if is there `JFrame#setSize()`, for `FLowLayout` doesn't matter,
Problem
I'm making an application to act as a hub of some sorts, where the user can store shortcuts to their favorite applications and easily launch them. I'm having some problems with `FlowLayout`, though. When I use `GridLayout`, the components display perfectly. When I use `FlowLayout`, nothing displays at all. GridLayout: FlowLayout: All I have changed is the `LayoutManager`. When I call `getComponentCount`, they both respond with 9. I thought this post was pretty long, so I put a snippet of my code on Code Tidy (from Pastebin) Thank you in advance for your help!