java中OverlayLayout(重叠)布局管理器专题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

参考文现:孙卫琴《java面向对象程序设计》其他不详
本文作者:黄邦勇帅
学习本文前提条件:应学习过AWT图形编程。

本文的说明:本文是对学习Swing时,出现的一个新布局管理器OverlayLayout的专题介绍。

本文对理解该布局管理器的关键概恋,进行了详细讲解,希望读过本文后,大家能熟练运用这个布局管理器。

本文的的内容全是个人理解,因此难免有理解上的错误,望读者指出更正。

声明:禁止抄袭本文,若需要转载本文请注明转载的网址,或者注明转载自“黄邦勇帅”。

OverlayLayout(重叠)布局管理器与组件对齐方式,对齐点
对齐点:该概念对于理解OverlayLayout布局至关重要,若不能理解对齐点那么你将对OverlayLayout和组件的对齐方式是一片雾水,为了说明对齐点我们将结合下图来讲解。

从以上两图可以看出来,对于OverlayLayout布局组件在容器中的放置位置是于对齐点有关的,在对齐点的位置(后面后介绍怎样计算)确定后就可以根据组件在X轴和Y轴的对齐方式来确定组件放置的位置。

由第一副图可以知道组件的X轴的值0表示组件的左侧面,1表示组件的右侧面,那么相应的0.25就表示离组件左侧面距离为组件宽度的0.25倍(1/4)处的地方,其他数字可以类推。

同样Y轴的0值表示组件的顶面,1表示组件的底面,0.25就表示组件离顶面距离为1/4处的地方,其他数字类推。

由第二副图可以知道,当组件在容器中的对齐点(对齐点的计算后面会专门讨论)确定后就可以根据设置的组件的X轴与Y轴的值来设置组件的位置,当把组件的X轴设为0时,表示组件以左侧面与X轴的对齐点对齐,如图中的按钮1。

当组件的X轴设为0.5时,则以组件整个宽度的中间部位与X轴的对齐点对齐,同样当X轴为0.75时,表示把组件离左侧面距离为0.75倍(即3/4)组件宽度的地方与X轴的对齐点对齐。

同样,对于Y轴当Y轴的值为0值,就以组件的顶面与Y轴对齐点对齐,当Y轴的值为1时,就以组件的底面与Y轴的对齐点对齐。

当Y轴的值为0.5时就以组件整个高度的中央部位与Y轴对齐点对齐,对于其他数字就与X轴的相似。

组件默认的对齐方式是以左侧面对齐X轴对齐点,以组件高度的中央部位(即Y轴值为0.5)与Y轴对齐点对齐。

在OverlayLayout布局中对齐点的计算:
1、首先要弄清楚,当容器使用OverlayLayou布局时,把组件添加进容器时,组件会被重叠在一起。

2、计算方法:假设有两个组件,组件的大小都为100个像素,组件1的X轴值为0.3,组件2的X轴值为0.6,由以上可知组件将以从左侧面起以整个组件宽度的0.3倍的位置与X轴对齐点对齐,这样的话X将以组件从左侧数起的30
个像素(100*0.3)处与对齐点对齐。

同样组件2将以组件从左侧数起的60个像素处与组件对齐。

因此我们就可以算出组件1与组件2在X轴方向所占据的总长度(如下图)为:100+(60-30)=130个像素,而对齐点在组件1从左侧数起的第60个像素处,因此对齐点所在的位置的比例为60/130=6/13,这样若容器在X轴方向上的宽度大于130个像素时,则X 轴对齐点的位置位于:容器宽度乘以6/13的位置。

若容器宽度为390像素时,则X轴方向的对齐点在390*(6/13)=180像素的位置。

具体见图。

对于Y轴的情况,组件1的Y轴的值设为1,而组件2设为0,因此Y轴的对齐点在容器的中间部位。

说明部分:在java中设置对齐方式使用的方法JComponent类中定义的方法,他们是:void setAlignmentX(float x);和void setAlignmentY(float y);
OverlayLayout布局示例:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class A{public static void main(String arg[])
{JFrame f=new JFrame();
JPanel jp1=new JPanel();
Container co=f.getContentPane();
OverlayLayout ov=new OverlayLayout(jp1); //使jp1使用OverlayLayout布局。

co.setLayout(null);
Dimension d1=new Dimension(100,40);
JButton jb1=new JButton("kkk1"); JButton jb2=new JButton("kkk2");
//设置按钮jb1与jb2的最大大小,若不设置该值按钮将以默认的最小大小显示。

jb1.setMaximumSize(d1);
jb2.setMaximumSize(d1);
//设置按钮jb1和jb2的对齐方式。

jb1.setAlignmentX(0.3f);
jb2.setAlignmentX(0.6f);
jb1.setAlignmentY(1f);
jb2.setAlignmentY(0f);
jp1.setLayout(ov); //把面板jp1的布局设置为OverlayLayout布局
jp1.setBackground(Color.red);jp1.setSize(390,250);//把横向大小设为390以方便计算
jp1.add(jb1);jp1.add(jb2);
co.add(jp1); f.setSize(444,300); f.setVisible(true);
//以下的输出一定要在f.setVisible方法这后,因为在该方法之后程序才绘制了组件,若不然的话程序会输出值0。

System.out.println("按钮kkk1的在容器中X轴的显示位置为:"+jb1.getLocation().x); //输出149,注意按钮的边框占有一定的像素,所以输出是149而不是150
System.out.println("按钮kkk2的在容器中X轴的显示位置为:"+jb2.getLocation().x); } } //输出119程序输出结果如下:。

相关文档
最新文档