`

AWT学习笔记(二)

    博客分类:
  • Java
阅读更多
  java为了实现跨平台的特性并且获得动态的布局效果,java将容器内的所有组件安排给一个"布局管理器"负责管理,如:排列顺序,组件的大小、位置,当窗口移动或调整大小后组件如何变化等功能授权给对应的容器布局管理器来管理,不同的布局管理器使用不同算法和策略,容器可以通过选择不同的布局管理器来决定布局。
    布局管理器主要包括:FlowLayout,BorderLayout,GridLayout,CardLayout,GridBagLayout
1. FlowLayout
    FlowLayout 是Panel,Applet的缺省布局管理器。其组件的放置规律是从上到下、从左到右进行放置,如果容器足够宽,第一个组件先添加到容器中第一行的最左边,后续的组件依次添加到上一个组件的右边,如果当前行已放置不下该组件,则放置到下一行的最左边。
构造方法主要下面几种:
    FlowLayout(FlowLayout.RIGHT,20,40);
  /*第一个参数表示组件的对齐方式,指组件在这一行中的位置是居中对齐、居右对齐还是居左对齐,第二个参数是组件之间的横向间隔,第三个参数是组件之间的纵向间隔,单位是象素。*/
  FlowLayout(FlowLayout.LEFT);
  //居左对齐,横向间隔和纵向间隔都是缺省值5个象素
  FlowLayout();
  //缺省的对齐方式居中对齐,横向间隔和纵向间隔都是缺省值5个象素
2. BorderLayout
  BorderLayout 是Window,Frame和Dialog的缺省布局管理器。BorderLayout布局管理器把容器分成5个区域:North,South,East,West和Center,每个区域只能放置一个组件。
例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区域没有组件,则保持空白。
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);
     }
    }
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"表示的是你对这层牌所取的名字*/
    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);
  }
  ……
  }
5.容器的嵌套
  在复杂的图形用户界面设计中,为了使布局更加易于管理,具有简洁的整体风格,一个包含了多个组件的容器本身也可以作为一个组件加到另一个容器中去,容器中再添加容器,这样就形成了容器的嵌套。下面是一个容器嵌套的例子。
例   import java.awt.*;
    public class ExGui3{
    private Frame f;
    private Panel p;
    private Button bw,bc;
    private Button bfile,bhelp;
       public static void main(String args[])
       {
         ExGui3 gui = new ExGui3();
         gui.go();
       }
    public void go(){
       f = new Frame("GUI example 3");
       bw=new Button("West");
       bc=new Button("Work space region");
       f.add(bw,"West");
       f.add(bc,"Center");
       p = new Panel();
       f.add(p,"North");
       bfile= new Button("File");
       bhelp= new Button("Help");
       p.add(bfile);
       p.add(bhelp);
       f.pack();
       f.setVisible(true);
    }
    }
小 结:
   1.Frame是一个顶级窗口。Frame的缺省布局管理器为BorderLayout。
   2.Panel 无法单独显示,必须添加到某个容器中。 Panel 的缺省布局管理器为FlowLayout。
   3.当把Panel 作为一个组件添加到某个容器中后,该Panel 仍然可以有自己的布局管理器。因此,可以利用Panel 使得BorderLayout 中某个区域显示多个组件,达到设计复杂用户界面的目的 。
   4.如果采用无布局管理器 setLayout(null),则必须使用setLocation(),setSize(),setBounds()等方法手工设置组件的大小和位置,此方法会导致平台相关,不鼓励使用。
分享到:
评论

相关推荐

    Java学习笔记7.0

    《Java JDK6学习笔记》是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型...

    JAVA图形编程(AWT+SWING)

    JAVA图形编程(AWT+SWING),包括AWT和SWING两部分。很不错的学习资料,全面,细致,和大家一起分享。

    java学习笔记 初学者必读

    3. 二•定义,关键字和类型 3-5 3.1. 注释的三种形式 3-5 3.2. Java代码中的“;”、“{}”、“ ” 3-5 3.3. 标识符 3-5 3.4. 数据类型 3-6 3.5. 命名规则 3-6 4. 三•表达式和控制流 4-6 4.1. 变量和作用域 4-6 4.2...

    corejava2awt

    全是自己编写的,没问题,是个学习java awt的好笔记。是个非抢号的一个学习资料

    awt开发工具学习随笔

    java学习过程中的随手笔记,包括常见的文件选择和保存窗口的实现,poi的excel处理

    java学习笔记 达内笔记(经典)

    (二)面向对象技术总结.pdf (三)corejava高级特性总结 (四)接口学习总结 (五)异常和内部类 (六)集合框架学习总结 (七)GUI和AWT事件模型 (八)多线程学习总结 (九)输入输出流学习总结 (十)网络编程学习总结

    Java学习笔记,Java基础篇

    Java学习笔记,Java基础篇 Java 是一种广泛应用于各种领域的高级编程语言,由 Sun Microsystems 公司于 1995 年推出。Java 语言具有多种特点,包括简单易学、面向对象、分布式、动态绑定等特性。Java 语言的发展...

    Java二级.zip

    本文件包含二级学习笔记,其笔记包含类,包,构造方法,对象,继承,多态,数组,异常与断言,输入与输出以及文件操作,线程控制,AWT事件处理,Swing组件,Applet程序设计等

    Java并发编程(学习笔记).xmind

    (1)二值信号量可用作互斥体(mutex) (2)实现资源池,例如数据库连接池 (3)使用信号量将任何一种容器变成有界阻塞容器 栅栏 能够阻塞一组线程直到某个事件发生 栅栏和闭锁的...

    学习JAVA 的笔记

    本资料里涵盖多线程、面向对象、集合框架、高级特定总结、网络编程总结、接口学习总结、GUI AWT等学习的总结与心得,是学习JAVA的一份很好的资料

    整理后java开发全套达内学习笔记(含练习)

    二进制是无法精确的表示 0.1 的。 进行高精度运算可以用java.math包中BigDecimal类中的方法。 自动类型提升又称作隐式类型转换。 强制类型转换:int ti; (byte) ti ; 强制转换,丢弃高位 宣告变量名称的同时...

    验证码生成工具类+验证码验证学习笔记

    验证码生成工具类+验证码验证学习笔记 验证码生成工具类参考自:java图形验证码生成工具类及web页面校验验证码,万分感谢! 效果图: 代码如下: package com.my.demo.session.others; import javax.imageio....

    达内Java笔记 各种总结

    面向对象技术总结 corejava高级特性总结 接口学习总结 异常和内部类 集合框架学习总结 GUI和AWT事件模型 多线程学习总结 输入输出流学习总结 网络编程学习总结

    Prepare RMS1 deployment environment.doc

    (本文基于GWT提供的开发指南(Developer Guide),所采用的图片,例子均出自GWT,可以认为是GWT的学习笔记) GWT的核心是通过一个编译器(compiler)把Java代码翻译为JavaScript代码,开发期间,用户以类似开发AWT...

    Java读书笔记.pdf

    Java读书笔记.pdf Java读书笔记.pdf是关于Java编程语言的读书...Java读书笔记.pdf涵盖了Java编程语言的基础知识、语法、编程技术和应用场景等多方面的内容,对于Java初学者和开发者来说是一个非常有价值的学习资源。

    《Java2核心技术》笔记

    《Java2核心技术》笔记 作者:叶加飞 加拿大.达内科技 (上海中心) 笔记包含以下文档: 面向对象技术总结.pdf ...GUI和AWT事件模型.pdf 多线程学习总结.pdf 输入输出流学习总结.pdf 网络编程学习总结.pdf

    达内 CoreJava老师笔记汇总

    CoreJava DAY01 Java概述 1 CoreJava DAY02 数据类型和控制结构 10 CoreJava DAY03 数组 20 ...CoreJava DAY18 awt event 146 CoreJava DAY19-20 多线程 154 CoreJava DAY21-22 IO 174 CoreJava DAY23 网络编程 197

    Java开发详解.zip

    000000_【课程介绍 —— 写在前面的话】_Java学习概述笔记.pdf 010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述笔记.pdf 010102_【第1章:JAVA概述及开发环境搭建】_Java开发环境搭建笔记.pdf 010201_【第2...

    漂亮时钟java完整代码.doc

    漂亮时钟 Java 完整代码学习笔记 Java 是一门广泛应用于 web 开发、 Android 应用开发、企业软件开发等领域的高级编程语言。 Java 语言的设计目标是“Write Once, Run Anywhere”,即一次编写,到处运行。 Java ...

    《Java 手机_PDA 程序设计入门》读书笔记

    新手学习J2ME编程的,内容有:J2ME不用AWT/SWING的原因:移动设备CPU慢,内存小;没有鼠标,只是触控屏幕和简单的按钮;屏幕小,不需要重叠窗口;消息处理机制负荷太重等一些关于J2ME的详细讲述

Global site tag (gtag.js) - Google Analytics