Why does GridLayout not respect my row and column parameters?
Created May 7, 2012
GridLayout respects the first non-zero row or column parameter passed to its constructor. The other value is computed based on the number of components in the container.
For example:
will create a single column of three buttons, even though you specified 4 columns.
Because of this behavior, I strongly recommend that you always use a "0" for the value that you don't care about. For example:
package sample;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Test1 {
public static void main(String[] args) {
Frame f = new Frame();
f.setLayout(new GridLayout(3,4));
f.add(new Button("1"));
f.add(new Button("2"));
f.add(new Button("3"));
f.pack();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}});
f.setVisible(true);
}
}
f.setLayout(new GridLayout(3,0));
// if you care that there are always three rows
f.setLayout(new GridLayout(0,4));
// if you care that there are always four columns