運行這個Java程序的時候容器網格設置為3行3列,為什麼運行的時候只有兩列,而且第四個面板大小與其他三個不同?
第一個問題,你的結果之所以不是3行3列, GridLayout(3,3)布局時,設定的列數只有在行數為0時才起作用;當行數不為0時,列數是由行數和添加的布局組件總數決定的。比如,你的程序裡面,行數為3,布局組件總數為4,那麼列數將被確定為2,所以,你會看到運行之後的布局。
第二個問題,你的p4有兩行,所以就是這樣的效果了。
修正代碼如下(布局行數為0,p4為1行),可以看到你需要的效果:
import java.awt.*;
import javax.swing.*;
public class JPanelTest extends JFrame{
public JPanelTest() throws HeadlessException {
Container c = getContentPane();
c.setLayout(new GridLayout(0,3,10,10));
JPanel p1 = new JPanel(new GridLayout(1,1,10,10));
JPanel p2 = new JPanel(new GridLayout(1,2,10,10));
JPanel p3 = new JPanel(new GridLayout(1,2,10,10));
JPanel p4 = new JPanel(new GridLayout(1,1,10,10));
p1.add(new JButton("1"));
p2.add(new JButton("2"));
p3.add(new JButton("3"));
p4.add(new JButton("4"));
c.add(p1);
c.add(p2);
c.add(p3);
c.add(p4);
setSize(400,500);
setVisible(true);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
public static void main(String[] args) {
new JPanelTest();
}
}