GridLayout布局但有时候无法使里面的控件占满JPanel啊??

时间:2022-09-11 12:41:19
代码如下:

import java.awt.*;
import javax.swing.*;

public class MyLayout extends JFrame {

public static final int BLOCKWIDTH=30;   //一个格子的大小

JButton[][] blocks;   
JPanel gpanel;     
JPanel npanel; 

public MyLayout()
{
super("Funway's Tetris!");

gpanel=new JPanel();
gpanel.setLayout(new GridLayout(20,12,0,0));
gpanel.setBorder(BorderFactory.createEtchedBorder()); 

blocks=new JButton[20][12];  

for(int i=0;i<20;i++)
{
for(int j=0;j<12;j++)
{
blocks[i][j]=new JButton(String.valueOf(i*12+j));
blocks[i][j].setBackground(Color.LIGHT_GRAY);
blocks[i][j].setBorder(BorderFactory.createEtchedBorder());
blocks[i][j].setSize(BLOCKWIDTH,BLOCKWIDTH);
gpanel.add(blocks[i][j]);
//blocks[i][j].setBounds(i*BLOCKWIDTH, j*BLOCKWIDTH, BLOCKWIDTH, BLOCKWIDTH);
blocks[i][j].setVisible(true);
}
}   
getContentPane().setLayout(null);
setSize(30*12,30*20);
getContentPane().add(gpanel);
gpanel.setBounds(0, 0, 20*12, 20*20);

setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
// TODO 自动生成方法存根
MyLayout qq=new MyLayout();
}
}
/*********************************************/
本来我想在JPanel里面用GridLayout的布局来布置里面那些JButton的数组.  
以为这些按钮会占满这个panel的
但为什么出来的效果却是JPanel的右边和下边都空出来一部分的空间??

感觉JAVA里面布局好象很混乱的样子. 老用不好..  哪位大哥能指点下...

2 个解决方案

#1


不是JAVA里面布局很混乱
getContentPane().setLayout(null);
setSize(30*12,30*20);
getContentPane().add(gpanel);
gpanel.setBounds(0, 0, 20*12, 20*20);
你用的是绝对布局,gpanelde的大小是被你固定了(gpanel.setBounds(0, 0, 20*12, 20*20);)这样设置的话,而gpanel中的所有组件宽度和高度加起来都没有gpanel的大,当然这些按钮就不会占满这个gpanel了

#2


为什么gpanel里的组件的宽高和会没有gpanel的大呢?
我不是设置了gpanel的大小正好可以被  12列*20行的组件整除的大小了么??

#1


不是JAVA里面布局很混乱
getContentPane().setLayout(null);
setSize(30*12,30*20);
getContentPane().add(gpanel);
gpanel.setBounds(0, 0, 20*12, 20*20);
你用的是绝对布局,gpanelde的大小是被你固定了(gpanel.setBounds(0, 0, 20*12, 20*20);)这样设置的话,而gpanel中的所有组件宽度和高度加起来都没有gpanel的大,当然这些按钮就不会占满这个gpanel了

#2


为什么gpanel里的组件的宽高和会没有gpanel的大呢?
我不是设置了gpanel的大小正好可以被  12列*20行的组件整除的大小了么??