1、GridBagConstraints中的两个值:gridWidth和gridHeight,在文档中的解释如下:
gridWidth:
指定在组件显示区域的一行中的单元格数
gridheight:
指定在组件显示区域的一列中的单元格数按照字面的意思是不是这两个数值是用来设置每一行有多少个格子以及每一列有多少个格子?这样的话,在建立初期直接就设置这样一个数值:gridWidth = 80,gridHeight = 80,是不是就将当前的容器分成了80*80个数目的小格子?
但是我从GirdBagLayout的代码中看,好像不是这个意思。求各位大大予以耐心解答,这个问题困恼我好久了
2、weightx和weighty。
对于这两个值,文档中说明是用来设定如何分配剩余空间的。剩余空间按照weightx的比例进行分配,比如一行有两个控件,一个weightx为1.0,另一个weightx为2.0,
那么实际的显示比例是weightx为1.0的控件占据1/3的空间大小;但我在实验的时候,使用了3个控件,两个JLabel(nameLabel和idLabel)和一个JCheckBox(idAutoAllot),将它们的weightx分别设置为nameLabel.weightx = 2.0 ;idLabel.weightx = 1.0 ;idAutoAllot.weightx = 1.0(设置过程不是这样的,通过GridBagConstraints对象设置容器,这里是简写),按照我的理解,应该是nameLabel占据1/2的空间,两外2个分别占据1/4的控件才对,结果显示出来以后,完全不是这样!我后来仔细看了一下,每个JLabel的text设置的长短不同,nameLabel.setText("名字") ;idLabel.setText("ID") ;idAutoAllot.setText("ID自动分配"),是不是因为每个组件的长度不一样,所以导致这种状况呢?如果我想忽略组件内容的长度,把组件按照指定的比例摆放(第一个占1/2,后两个每个占1/4,共计1/2),请问该怎么做?
以下是一张参照图,看不到的可以到这个博客去看:http://blog.sina.com.cn/s/blog_438163a50100cndn.html
gridWidth:
指定在组件显示区域的一行中的单元格数
gridheight:
指定在组件显示区域的一列中的单元格数按照字面的意思是不是这两个数值是用来设置每一行有多少个格子以及每一列有多少个格子?这样的话,在建立初期直接就设置这样一个数值:gridWidth = 80,gridHeight = 80,是不是就将当前的容器分成了80*80个数目的小格子?
但是我从GirdBagLayout的代码中看,好像不是这个意思。求各位大大予以耐心解答,这个问题困恼我好久了
2、weightx和weighty。
对于这两个值,文档中说明是用来设定如何分配剩余空间的。剩余空间按照weightx的比例进行分配,比如一行有两个控件,一个weightx为1.0,另一个weightx为2.0,
那么实际的显示比例是weightx为1.0的控件占据1/3的空间大小;但我在实验的时候,使用了3个控件,两个JLabel(nameLabel和idLabel)和一个JCheckBox(idAutoAllot),将它们的weightx分别设置为nameLabel.weightx = 2.0 ;idLabel.weightx = 1.0 ;idAutoAllot.weightx = 1.0(设置过程不是这样的,通过GridBagConstraints对象设置容器,这里是简写),按照我的理解,应该是nameLabel占据1/2的空间,两外2个分别占据1/4的控件才对,结果显示出来以后,完全不是这样!我后来仔细看了一下,每个JLabel的text设置的长短不同,nameLabel.setText("名字") ;idLabel.setText("ID") ;idAutoAllot.setText("ID自动分配"),是不是因为每个组件的长度不一样,所以导致这种状况呢?如果我想忽略组件内容的长度,把组件按照指定的比例摆放(第一个占1/2,后两个每个占1/4,共计1/2),请问该怎么做?
以下是一张参照图,看不到的可以到这个博客去看:http://blog.sina.com.cn/s/blog_438163a50100cndn.html
GridBagLayout g = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
setLayout(g);
c.fill = c.BOTH ;
c.weightx = 0.5 ;
c.anchor = c.NORTHEAST ;
sysListInfo.setBorder(BorderFactory.createEtchedBorder());
g.setConstraints(sysListInfo,c);
add(sysListInfo) ;
c.weightx = 0.5 ;
c.anchor = c.NORTHEAST ;
listInfo.setBorder(BorderFactory.createEtchedBorder());
c.gridwidth = c.REMAINDER ;
g.setConstraints(listInfo,c);
add(listInfo) ;以上的代码,按照你说的各设置为0.5,但是由于两个JLabel对象sysListInfo和listInfo的Text不一样长短(sysListInfo.setText("系统列表")
listInfo.setText("正在编辑列表: ")),所以实际上出来的界面中,两个JLabel并不是各占据50%的宽度,而是listInfo占据的宽度比sysListInfo
稍多,超过了50%。怎么设置才能忽略这种内容的差别,让两个JLabel严格的各占1/2呢?另外,两个JLabel都是默认的放在的容器的中间位置,我用c.anchor的值并不能改变这两个JLabel的显示位置,请问怎么才能将这两个容易显示到最上方呢?