文档库 最新最全的文档下载
当前位置:文档库 › OverlayLayout(重叠)布局管理器专题.doc

OverlayLayout(重叠)布局管理器专题.doc

参考文现:孙卫琴《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程序输出结果如下:

相关文档
相关文档 最新文档