1. 布局
对于JFrame窗口,默认布局是BorderLayout布局。
对于JPanel,默认布局是FlowLayout布局。
容器可以使用方法:
setLayout(布局对象);来设置自己的布局。
(1)FlowLayout布局
FlowLayout类创建的对象称做FlowLayout型布局。
FlowLayout类的一个常用构造方法如下:
FlowLayout()
该构造方法可以创建一个居中对齐的布局对象。例如:
FlowLayout flow=new FlowLayout();
如果一个容器con使用这个布局对象:
con.setLayout(flow);
那么,con可以使用Container类提供的add方法将组件顺序地添加到容器中,组件按照加入的先后顺序从左向右排列,一行排满之后就转到下一行继续从左至右排列。
FlowLayout布局对象调用flow.setAlignment(FlowLayout.LEFT);来设置组件靠左对齐
FlowLayout布局对象调用setHgap(int hgap) 方法和setVgap(int vgap)可以重新设置布局的水平间隙和垂直间隙。
(2)BorderLayout布局
BorderLayout 布局是Window型容器的默认布局,例如JFrame、JDialog都是Window类的间接子类,它们的默认布局都是BorderLayout 布局。容器使用BorderLayout布局,那么容器空间简单地划分为东、西、南、北、中五个区域。每加入一个组件都应该指明把这个组件添加在哪个区域中,区域由BorderLayout中的静态常量CENTER、NORTH、SOUTH、WEST、EAST表示.
添加到某个区域的组件将占据整个这个区域。每个区域只能放置一个组件,如果向某个已放置了组件的区域再放置一个组件,那么先前的组件将被后者替换掉。
(3)CardLayout 布局
使用CardLayout 的容器可以容纳多个组件,但是实际上同一时刻容器只能从这些组件中选出一个来显示,这个被显示的组件将占据所有的容器空间。 JTabbedPane创建的对象是一个轻容器,称作选项卡窗格。选项卡窗格的默认布局是CardLayout卡片式布局。
选项卡窗格可以使用:
add(String text,Component c);
方法将组件c添加到容器当中,并指定和该组件c对应的选项卡的文本提示是text。
(4)GridLayout布局
GridLayout是使用较多的布局编辑器,其基本布局策略是把容器划分成若干行乘若干列的网格区域,组件就位于这些划分出来的小格中。
1)使用GridLayout的构造方法GridLayout(int m,int n)创建布局对象,指定划分网格的行数m和列数n,例如:
GridLayout grid=new new GridLayout(10,8);
2)使用GridLayout布局的容器调用方法add将组件加入容器,组件进入容器的顺序将按照第一行第一个、第一行第二个、…第一行最后一个、第二行第一个、…最后一行第一个、…最后一行最后一个。
(5)BoxLayout布局
用BoxLayout类可以创建一个布局对象,称为盒式布局。BoxLayout在java.swing.border包中。java swing包提供了Box类,该类也是Container类的一个子类,创建的容器称作一个盒式容器,盒式容器的的默认布局是盒式布局,而且不允许更改盒式容器的布局。因此,在策划程序的布局时,可以利用容器的嵌套,将某个容器嵌入几个盒式容器,达到你的布局目的。使用盒式布局的容器将组件排列在一行或一列,这取决于创建盒式布局对象时,是否指定了是行排列还是列排列。
行型盒式布局容器中添加的组件的上沿在同一水平线上。列型盒式布局容器中添加的组件的左沿在同一垂直线上。使用Box类的类(静态)方法 createHorizontalBox()可以获得一个具有行型盒式布局的盒式容器;使用Box类的类(静态)方法 createVerticalBox()可以获得一个具有列型盒式布局的盒式容器。
如果想控制盒式布局容器中组件之间的距离,就需要使用水平支撑或垂直支撑。Box类调用静态方法createHorizontalStrut(int width)可以得到一个不可见的水平Struct类型对象,称做水平支撑。该水平支撑的高度为0,宽度是width。
Box类调用静态方法createVertialStrut(int height)可以得到一个不可见的垂直Struct类型对象,称做垂直支撑。参数height决定垂直支撑的高度,垂直支撑的宽度为0。
(6)null布局
我们可以把一个容器的布局设置为null布局(空布局)。空布局容器可以准确地定位组件在容器的位置和大小。setBounds(int a,int b,int width,int height)方法是所有组件都拥有的一个方法,组件调用该方法可以设置本身的大小和在容器中的位置。例如,p是某个容器:
p.setLayout(null);
把p的布局设置为空布局。
向空布局的容器p添加一个组件c需要两个步骤,首先使用add(c)方法向容器添加组件,然后组件c再调用setBounds(int a,int b,int width,int height)方法设置该组件在容器中的位置和本身的大小,组件都是一个矩形结构,方法中的参数a,b是被添加的组件c的左上角在容器中的位置坐标,即该组件距容器左面a个像素,距容器上方b个像素;weidth,height是组件c的宽和高。
2. 中间容器-面板
(1)JPanel 面板
我们会经常使用JPanel创建一个面板,再向这个面板添加组件,然后把这个面板添加到底层容器或其他中间容器中。JPanel面板的默认布局是FlowLayout布局。可以使用JPanel类构造方法JPanel()构造一个面板容器对象
(2)JScrollPane滚动窗格
我们可以把一个组件放到一个滚动窗格中,然后通过滚动条来观察这个组件。例如,JTextArea不自带滚动条,因此我们就需要把文本区放到一个滚动窗格中。可以使用JScorollPane的构造方法JScorollPane(component c)构造一个滚动窗格。
(3)JSplitPane拆分窗格java中split的用法
顾名思义,拆分窗格就是被分成两部分的容器。拆分窗格有两种类型:水平拆分和垂直拆分。水平拆分窗口用一条拆分线把容器分成左右两部分,左面放一个组件,右面放一个组件,拆分线可以水平移动。垂直拆分窗格由 一条拆分线分成上下两部分,上面放一个组件,下面放一个组件,拆分线可以垂直移动。可以使用JSplitPane的构造方法JSplitPane(int a, Component b ,Component c)构造一个拆分窗格,参数a取JSplitPane的静态常量 HORIZONTAL_SPLIT或VERTICAL_SPLIT,以决定是水平还是垂直拆分。后两个参数决定要放置的组件。拆分窗格调用setDividerLocation(double position)设置拆分线的位置。
(4)JLayeredPane分层窗格
如果添加到容器中的组件经常需要处理重叠问题,就可以考虑将组件添加到JLayeredPane容器。JLayeredPane容器将容器分成5个层,容器使用
add(Jcomponent com, int layer);
添加组件com,并指定com所在的层,其中参数layer取值JLayeredPane类中的类常量:
DEFAULT_LAYER 、PALETTE_LAYER、 MODAL_LAYER、POPUP_LAYER、 DRAG_LAYER。
DEFAULT_LAYER是最底层,添加到DEFAULT_LAYER层的组件如果和其它层的组件发生重叠时,将被其它组件遮挡。DRAG_LAYER层是最上面的层,如果JLayeredPane中添加了许多组件,当你用鼠标移动一组件时,可以把移动的组件放到DRAG_LAYER层,这样,组件在移动过程中,就不会被其它组件遮挡。添加到同一层上的组件,如果发生重叠,后添加的会遮挡先添加的组件。JLayeredPane对象调用
public void setLayer(Component c,int layer)
可以重新设置组件c所在的层,调用
public int getLayer(Component c)
可以获取组件c所在的层数。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论