初学Java之LayoutManager

 java为了实现跨平台的特性并且获得动态的布局效果,java将容器内的所有组件安排给一个"布局管理器"负责管理,如:排列顺序,组件的大小、位置,当窗口移动或调整大小后组件如何变化等功能授权给对应的容器布局管理器来管理,不同的布局管理器使用不同算法和策略,容器可以通过选择不同的布局管理器来决定布局。

  布局管理器主要包括:FlowLayout,BorderLayout,GridLayout,CardLayout,GridBagLayout

    import java.awt.*;
    public class ExGui{
        private Frame f;
        private Button b1;
        private Button b2;
        public static void main(String args[]){
            ExGui that = new ExGui();
            that.go();
    }




        public void go(){
            f = new Frame("GUI example");
            f.setLayout(new FlowLayout()); 
            //设置布局管理器为FlowLayout

            b1 = new Button("Press Me"); 
            //按钮上显示字符"Press Me"

            b2 = new Button("Don't Press Me");
            f.add(b1);
            f.ad

d(b2);
            f.pack(); 
            //紧凑排列,其作用相当于setSize(),即让窗口
            尽量小,小到刚刚能够包容住b1、b2两个按钮

            f.setVisible(true);
        }
    }
Java学习笔记(二)---LayoutManager

1. FlowLayout

  FlowLayout 是Panel,Applet的缺省布局管理器。其组件的放置规律是从上到下、从左到右进行放置,如果容器足够宽,第一个组件先添加到容器中第一行的最左边,后续的组件依次添加到上一个组件的右边,如果当前行已放置不下该组件,则放置到下一行的最左边。

  构造方法主要下面几种:
  FlowLayout(FlowLayout.RIGHT,20,40);
  
  FlowLayout(FlowLayout.LEFT); 
  //居左对齐,横向间隔和纵向间隔都是缺省值5个象素

  FlowLayout(); 
  //缺省的对齐方式居中对齐,横向间隔和纵向间隔都是缺省值5个象素

    import java.awt.*;
    public class myButtons{ 
     public static void main(String args[])
     {
        Frame f = new Frame(); 
        f.setLayout(new FlowLayout());
        Button button1 = new Button("Ok");
        Button button2 = new Button("Open");
        Button button3 = new Button("Close");
        f.add(button1);
        f.add(button2);
        f.add(button3);
        f.setSize(300,100); 
        f.setVisible(true);
     }
    }

Java学习笔记(二)---LayoutManager

     当容器的大小发生变化时,用FlowLayout管理的组件会发生变化,其变化规律是:组件的大小不变,但是相对位置会发生变化。例如上图中有三个按钮都处于同一行,但是如果把该窗口变窄,窄到刚好能够放下一个按钮,则第二个按钮将折到第二行,第三个按钮将折到第三行。按钮"Open"本来在按钮"OK"的右边,但是现在跑到了下面,所以说"组件的大小不变,但是相对位置会发生变化"。

 
2. BorderLayout

  BorderLayout 是Window,Frame和Dialog的缺省布局管理器。BorderLayout布局管理器把容器分成5个区域:North,South,East,West和Center,每个区域只能放置一个组件。各个区域的位置及大小如下图所示:

    初学Java之LayoutManager_第1张图片

    import java.awt.*;
    public class buttonDir{
     public static void main(String args[]){
      Frame f = new Frame("BorderLayout");
      f.setLayout(new BorderLayout());
      f.add("North", new Button("North"));
      //第一个参数表示把按钮添加到容器的North区域

      f.add("South", new Button("South"));
      //第一个参数表示把按钮添加到容器的South区域

      f.add("East", new Button("East")); 
      //第一个参数表示把按钮添加到容器的East区域

      f.add("West", new Button("West"));
      //第一个参数表示把按钮添加到容器的West区域
      f.add("Center", new Button("Center"));
      //第一个参数表示把按钮添加到容器的Center区域
      f.setSize(200,200);
      f.setVisible(true); 
     }
    }

在使用BorderLayout的时候,如果容器的大小发生变化,其变化规律为:组件的相对位置不变,大小发生变化。例如容器变高了,则North、South区域不变,West、Center、East区域变高;如果容器变宽了,West、East区域不变,North、Center、South区域变宽。不一定所有的区域都有组件,如果四周的区域(West、East、North、South区域)没有组件,则由Center区域去补充,但是如果Center区域没有组件,则保持空白,其效果如下几幅图所示:
初学Java之LayoutManager_第2张图片

   North区域缺少组件         

  初学Java之LayoutManager_第3张图片

     North和Center区域缺少组件
3. GridLayout

  使容器中各个组件呈网格状布局,平均占据容器的空间。

    import java.awt.*;
    public class ButtonGrid {
    public static void main(String args[]) {
      Frame f = new Frame("GridLayout");
      f.setLayout(new GridLayout(3,2)); 
                 //容器平均分成3行2列共6格
      f.add(new Button("1")); //添加到第一行的第一格
      f.add(new Button("2")); //添加到第一行的下一格
      f.add(new Button("3")); //添加到第二行的第一格
      f.add(new Button("4")); //添加到第二行的下一格
      f.add(new Button("5")); //添加到第三行的第一格
      f.add(new Button("6")); //添加到第三行的下一格
      f.setSize(200,200);
      f.setVisible(true);
    }
    }
初学Java之LayoutManager_第4张图片

 4. CardLayout

  CardLayout布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间,它把容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件,当然每层都可以利用Panel来实现复杂的用户界面。牌布局管理器(CardLayout)就象一副叠得整整齐齐的扑克牌一样,有54张牌,但是你只能看见最上面的一张牌,每一张牌就相当于牌布局管理器中的每一层。

 import java.awt.*;
 import java.awt.event.*; //事件处理机制
 public class ThreePages implements MousListener {
    CardLayout layout=new CardLayout(); //实例化一个牌布局管理器对象
    Frame f=new Frame("CardLayout");
    Button page1Button;
    Label page2Label; //Label是标签,实际上是一行字符串
    TextArea page3Text; //多行多列的文本区域
    Button page3Top;
    Button page3Bottom;

 public static void main(String args[]) 
 { new ThreePages().go(); }


 Public void go()
 {   f.setLayout(layout); //设置为牌布局管理器layout
    f.add(page1Button=new Button("Button page"),"page1Button"); 
    page1Button.addMouseListener(this); //注册监听器
    f.add(page2Label=new Label("Label page"),"page2Label");
    page2Label.addMouseLisener(this); //注册监听器
    Panel panel=new Panel();
    panel.setLayout(new BorderLayout());
    panel.add(page3Text=new TextArea("Composite page"),"Center");
    page3Text.addMouseListener(this); 
    panel.add(page3Top=new Button("Top button") , "North");
    page3Top.addMouseListener(this);
    panel.add(page3Bottom=new Button("Bottom button") ,"South");
    page3Bottom.addMouseListener(this);
    f.add(panel,"panel");
    f.setSize(200,200);
    f.setVisible(true);
 }
 ……
 }

你可能感兴趣的:(初学Java之LayoutManager)