七月网

布局管理器(jpanel的默认布局管理器)

七月网1680

一、请问JAVA有几种布局管理器。分别怎么用谢谢

Java的GUI界面定义是由awt类和Swing类来完成的。它在布局管理上面采用了容器和布局管理分离的方案。也就是说,容器只管将其他小件放入其中,而不管这些小件是如何放置的。对于布局的管理交给专门的布局管理器类(LayoutManager)来完成。

布局管理器(jpanel的默认布局管理器)

其实,java在GUI方面应该是并不成功的。Awt类和swing类的结构非常复杂,加上充斥其间的子类继承和接口实现,使得要想掌握这两个类非常困难。这也是很多的java程序员抱怨的事情,但GUI已经成了程序发展的方向,所以这里我们也得勉为其难了。

现在我们来看java中布局管理器的具体实现。我们前面说过,java中的容器类(Container),它们只管加入小件(Meta),也就是说,它只使用自己的add()方法向自己内部加入小件。同时他记录这些加入其内部的小件的个数,可以通过container.getComponentCount()方法类获得小件的数目,通过container.getComponent(i)来获得相应小件的句柄。然后LayoutManager类就可以通过这些信息来实际布局其中的小件了。

java已经为我们提供了几个常用的布局管理器类,例如:BorderLayout、FlowLayout、GridBagLayout等等。但在实际的布局上,我们还是会有其他的需要。我在不久前的一个问题中曾经要一个垂直的流式布局,我称之为VflowLayout,其实BoxLayout和GridBagLayout可以完成类似的工作,但前者是swing类的成员,我的客户端是一个Applet,不能使用,而后者必须在类生成的时候指定列数,而失去了灵活性,所以我决定重写一个自己的布局管理器来实现。经过分析,所有的LayoutManager都要实现一个接口,就是LayoutManager Inerface或者是他的一个子接口LayoutManager2 Interface,后者用于复杂的布局管理,例如GridCardLayout。LayoutManager有五个方法需要实现,分别是:

1、public void addLayoutComponent(String name, Component comp);

2、public void removeLayoutComponent(Component comp);

3、public Dimension preferredLayoutSize(Container container);

4、public Dimension minimUMLayoutSize(Container container);

5、public void layoutContainer(Container container);

第一个方法其实就是你在使用container.add(String name,component comp);时调用的方法,例如BorderLayout为布局管理器时。但在FlowLayout中由于没有其他的附加信息,所以不需要填充这个方法。相应的第二个方法也就不需要填充了。真正核心的方法是第三个和第五个方法,前者是最终确定Container有多大的,而后者就是决定Container中各个小件的实际位置的了。也就是说,当我们用container.setLayout(LayoutManager)后,再加入小件后,最后系统做的工作其实是LayoutManager. layoutContainer(container);和container.setSize(LayoutManager. PreferredLayoutSize(container));。下面是我的新类:VflowLayout。

public class VFlowLayout implements LayoutManager,Serializable{

public VFlowLayout(int i,int j){

public void addLayoutComponent(String name, Component comp){

public void removeLayoutComponent(Component comp){

public Dimension preferredLayoutSize(Container container){

synchronized(container.getTreeLock()){

Dimension dimension1=new Dimension(0,0);

int i=container.getComponentCount();

Component component= container.getComponent(j);

Dimension dimension2=component.getPreferredSize();

dimension1.width=Math.max(dimension1.width,dimension2.width);

dimension1.height+=dimension2.height;

Insets insets=container.getInsets();

dimension1.height+=insets.top+insets.bottom+vgap*2;

dimension1.width+=insets.left+insets.right+hgap*2;

Dimension dimension=dimension1;

//return(new Dimension(50,200));

public Dimension minimumLayoutSize(Container container){

synchronized(container.getTreeLock()){

Dimension dimension1=new Dimension(0,0);

int i=container.getComponentCount();

Component component= container.getComponent(j);

Dimension dimension2=component.getMinimumSize();

dimension1.width=Math.max(dimension1.width,dimension2.width);

dimension1.height+=dimension2.height;

Insets insets=container.getInsets();

dimension1.height+=insets.top+insets.bottom+vgap*2;

dimension1.width+=insets.left+insets.right+hgap*2;

Dimension dimension=dimension1;

public void layoutContainer(Container container){

synchronized(container.getTreeLock()){

Insets insets=container.getInsets();

int vSpace=container.getSize().height-(insets.top+insets.bottom+vgap*2);

int componentCount=container.getComponentCount();

Component component=container.getComponent(i);

Dimension dimension=component.getPreferredSize();

component.setSize(dimension.width,dimension.height);

if(totalHeight==0|| totalHeight+dimension.height<=vSpace){

totalHeight+=dimension.height;

width=Math.max(width,dimension.width);

moveComponents(container,insets.top+vgap,left,width,componentStart,i);

moveComponents(container,insets.top+vgap,left,width,componentStart,componentCount);

private void moveComponents(Container container,int top,int left,int width,int componentStart,int componentEnd){

synchronized(container.getTreeLock()){

Component component=container.getComponent(i);

component.setLocation(left,top);

top+=component.getPreferredSize().height+vgap;

二、资源管理器的工具栏在哪里

1、资源管理器的工具栏需要在布局内添加,添加步骤如下:

2、一、首先打开开始菜单的“附件”,然后点击打开“Windows资源管理器”。

3、二、打开资源管理器后,点击左上角“组织”。

4、三、下拉菜单内点击“布局”,子菜单内点击“菜单栏”。

5、四、这时就可以在资源管理器内添加上工具栏。

三、JFrame和JPanel的默认布局管理器是什么

1、JFrame的默认布局管理器是:BorderLayout

BorderLayout是一个布置容器的边框布局,它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:北、南、东、西、中,每个区域最多只能包含一个组件。

2、JPanel的默认布局管理器是:FlowLayout

FlowLayout(int align, int hgap, int vgap)创建一个新的流布局管理器,它具有指定的对齐方式以及指定的水平和垂直间隙,用于JAVA语言的图形化界面设计。

BorderLayout边界布局管理器它将容器划分为5个区域,分别是东(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER)。

组件可被放置在这5个区域中的任意一个。Broadlayout边界布局管理器将容器划分为五个区域,在改变容器时,North和South区的高度不变,长度调整。West和East的区域宽度不变,高度调整,Center会相应进行调整。

当向Borderlayout布局管理器的容器中添加组件时,需要使用add(Component comp, Object constraints)方法,其中参数comp表示要添加的组件。

constraints指定将组件添加到布局中的方式和位置的对象。他是一个Object类型,再传参时可以使用BroderLayout类型提供的五个常量,他们分别是EAST、SOUTH、WEST、NORTH、CENTER。

OK,本文到此结束,希望对大家有所帮助。