4221学习网
首页 | 网址大全 | 脑力倍增 | 电脑学院 | 学习方法 | 口才交际 | 英语学习 | 工作职场 | 成功励志 | 文学小说 | QQ·技巧 | 视频短片 | 视频教程 | NBA | 图片 | 游戏技巧 | 恋爱技巧 | 专题教程 | 4221论坛
热门关键字: 视频教程  美女  百家讲坛  记忆力  疯狂英语
 → 当前位置:4221学习网>电脑学院>编程开发>JAVA>正文

JAVA教程 第五讲 AWT图形用户界面设计

4221学习网 2007-09-27 来源:互联网 收藏本文

5.1 用AWT生成图形化用户界面

 
抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立图形用户界面GUI (Graphics User Interface)工具集,AWT可用于Java的applet和applications中。它支持图形用户界面编程的功能包括: 用户界面组件;事件处理模型;图形和图像工具,包括形状、颜色和字体类;布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率无关;数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴。

5.1.1 Java.awt包
 
  Java.awt包中提供了GUI设计所使用的类和接口,可从图5.1中看到主要类之间的关系。

  java.awt包提供了基本的Java程序的GUI设计工具。主要包括下述三个概念:

  组件--Component
  容器--Container
  布局管理器--LayoutManager

5.1.2 组件和容器

  Java的图形用户界面的最基本组成部分是组件(Component),组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。

  类Java.awt.Component是许多组件类的父类,Component类中封装了组件通用的方法和属性,如图形的组件对象、大小、显示位置、前景色和背景色、边界、可见性等,因此许多组件类也就继承了Component类的成员方法和成员变量,相应的成员方法包括:

   getComponentAt(int x, int y)
   getFont()
   getForeground()
   getName()
   getSize()
   paint(Graphics g)
   repaint()
   update()
   setVisible(boolean b)
   setSize(Dimension d)
   setName(String name)等

  
  容器(Container)也是一个类,实际上是Component的子类,因此容器本身也是一个组件,具有组件的所有性质,但是它的主要功能是容纳其它组件和容器。

  布局管理器(LayoutManager):每个容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器。

  为了使我们生成的图形用户界面具有良好的平台无关性,Java语言中,提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。

  在程序中安排组件的位置和大小时,应该注意以下两点:
  1.容器中的布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件的这些属性。如果试图使用Java 语言提供的setLocation(),setSize(),setBounds() 等方法,则都会被布局管理器覆盖。

  2.如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为:
   setLayout(null);

5.1.3 常用容器

  容器Java.awt.Container是Component的子类,一个容器可以容纳多个组件,并使它们成为一个整体。容器可以简化图形化界面的设计,以整体结构来布置界面。所有的容器都可以通过add()方法向容器中添加组件。

  有三种类型的容器:Window、Panel、ScrollPane,常用的有Panel, Frame, Applet。

 1.Frame

  

  以下是容器的例子:

 例5.1
  import Java.awt.*;
  public class MyFrame extends Frame{
  public static void main(String args[ ]){
        MyFrame fr = new MyFrame("Hello Out There!");
                       //构造方法

        fr.setSize(200,200);
                //设置Frame的大小,缺省为(0,0)

        fr.setBackground(Color.red);
                //设置Frame的背景,缺省为红色

        fr.setVisible(true);
                //设置Frame为可见,缺省为不可见

  }
     public MyFrame (String str){
        super(str); //调用父类的构造方法
     }
  }

 查看运行结果

  一般我们要生成一个窗口,通常是用Window的子类Frame来进行实例化,而不是直接用到Window类。Frame的外观就像我们平常在windows系统下见到的窗口,有标题、边框、菜单、大小等等。每个Frame的对象实例化以后,都是没有大小和不可见的,因此必须调用setSize( )来设置大小,调用setVisible(true)来设置该窗口为可见的。

  另外,AWT在实际的运行过程中是调用所在平台的图形系统,因此同样一段AWT程序在不同的操作系统平台下运行所看到的图形系统是不一样的。例如在windows下运行,则显示的窗口是windows风格的窗口;而在UNIX下运行时,则显示的是UNIX风格的窗口。


 2. Panel

  

 例5.2
  import Java.awt.*;
  public class FrameWithPanel extends Frame{
  public FrameWithPanel(String str){
        super(str);
      }

      public static void main(String args[]){
        FrameWithPanel fr = new FrameWithPanel("Frame with Panel");
        Panel pan=new Panel();
        fr.setSize(200,200);
        fr.setBackground(Color.red);
               //框架fr的背景颜色设置为红色

        fr.setLayout(null);
               //取消布局管理器

        pan.setSize(100,100);
        pan.setBackground(Color.yellow);
               //设置面板pan的背景颜色为黄色

        fr.add(pan); //用add方法把面板pan添加到框架fr中
        fr.setVisible(true);
        }
   }

    查看运行结果

  一般我们要生成一个窗口,通常是用Window的子类Frame来进行实例化,而不是直接用到Window类。Frame的外观就像我们平常在windows系统下见到的窗口,有标题、边框、菜单、大小等等。每个Frame的对象实例化以后,都是没有大小和不可见的,因此必须调用setSize( )来设置大小,调用setVisible(true)来设置该窗口为可见的。

  另外,AWT在实际的运行过程中是调用所在平台的图形系统,因此同样一段AWT程序在不同的操作系统平台下运行所看到的图形系统是不一样的。例如在windows下运行,则显示的窗口是windows风格的窗口;而在UNIX下运行时,则显示的是UNIX风格的窗口。

5.1.4 LayoutManager 布局管理器(1)

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

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

 例5.3
    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.add(b2);
            f.pack();
            //紧凑排列,其作用相当于setSize(),即让窗口
            尽量小,小到刚刚能够包容住b1、b2两个按钮

            f.setVisible(true);
        }
    }

    查看运行结果

 
1. FlowLayout

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

  构造方法主要下面几种:
  FlowLayout(FlowLayout.RIGHT,20,40);
  /*第一个参数表示组件的对齐方式,指组件在这一行中的位置是居中对齐、居右对齐还是居左对齐,第二个参数是组件之间的横向间隔,第三个参数是组件之间的纵向间隔,单位是象素。*/
  FlowLayout(FlowLayout.LEFT);
  //居左对齐,横向间隔和纵向间隔都是缺省值5个象素

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

 例5.4
    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);
     }
    }

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

 2. BorderLayout


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

    

 例5.5
    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区域没有组件,则保持空白,其效果如下几幅图所示:

  
       North区域缺少组件         

  
      North和Center区域缺少组件

 
3. GridLayout

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

 例5.6
    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);
    }
    }

共5页: 上一页 1 [2] [3] [4] [5] 下一页
上一篇:JAVA教程 第六讲 Java的线程和Java Applet   下一篇:JAVA教程 第四讲 Java的例外处理和I/O流
添加到google书签 digg this! 添加到bolaa 添加到yahoo+ 添加到新浪vivi 添加到365key  
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭

相关文章
·JAVA教程 第六讲 Java的线程和Java Applet
·JAVA教程 第四讲 Java的例外处理和I/O流
·JAVA教程 第七讲 Swing用户界面设计
·JAVA教程 第三讲 Java语言中的面向对象特性
·JAVA教程 第八讲 Java网络编程
·JAVA教程 第二讲 Java语言基础知识
·JAVA教程 第一讲 Java语言概述
·经验谈:我学习使用java的一点体会
·变态级JAVA程序员面试32问
·关于java中文乱码问题一些解决方案和经验
发表评论
要记得去论坛讨论,点击注册新会员) 密码: 匿名评论
评论内容:(请自觉遵守互联网相关政策法规。)
最新文章
·JAVA教程 第一讲 Java语言概述
·JAVA教程 第二讲 Java语言基础知识
·JAVA教程 第三讲 Java语言中的面向对象特
·JAVA教程 第四讲 Java的例外处理和I/O流
·JAVA教程 第六讲 Java的线程和Java Apple
·JAVA教程 第七讲 Swing用户界面设计
·JAVA教程 第八讲 Java网络编程
·经验谈:我学习使用java的一点体会
·变态级JAVA程序员面试32问
·关于java中文乱码问题一些解决方案和经验
本类阅读排行榜
·JAVA教程 第七讲 Swing用户界面设计
·JAVA教程 第八讲 Java网络编程
·JAVA教程 第二讲 Java语言基础知识
·JAVA教程 第一讲 Java语言概述
·在Eclipse中集成Ant编程之配置祥解篇
·JAVA教程 第四讲 Java的例外处理和I/O流
·变态级JAVA程序员面试32问
·JAVA教程 第六讲 Java的线程和Java Apple
·JAVA教程 第三讲 Java语言中的面向对象特
·关于java中文乱码问题一些解决方案和经验
热点视频教程
视频街舞 舞步 教学
视频李孝利十分钟详细舞蹈教程
视频windowsxp重装系统视频教程
视频美女教你跳舞
视频街舞 舞步 教学2
视频韩国的太空步教程,后滑、侧滑、旋转太空
视频如何安装双操作系统
视频台球教程-基本杆法
视频双截棍视频教程-定式
视频【WindowsXP入门教程】 - 硬盘分区
视频启功书法视频
视频24式太极拳教学---基本动作
视频[百家讲坛]三十六计01_借刀杀人
视频 斯诺克台球竿法-后退球
视频超级全脑速读训练教程

设为首页 - 加入收藏 - 关于我们 - 联系我们 - 友情连接

4221学习网版权所有-鄂ICP备07006816号
已浏览: