美文网首页
GUI(图形用户界面)上

GUI(图形用户界面)上

作者: 不小心丢了 | 来源:发表于2019-11-06 13:11 被阅读0次

    GUI全称是Graphical User Interface,即图形用户界面,顾名思义,就是应用程序提供给用户操作的图形界面,包括窗口、菜单、按钮、工具栏和其他各种图形界面元素。目前,图形用户界面已经成为一种趋势,几乎所有的程序设计语言都提供了GUI设计功能。Java中针对GUI设计提供了丰富的类库,这些类分别位于java.awt和java.swing包中,简称为AWT和Swing。其中,AWT是SUN公司最早推出的一套API,它需要利用本地操作系统所提供的图形库,属于重量级组件,不跨平台,它的组件种类有限,可以提供基本的GUI设计工具,却无法实现目前GUI设计所需的所有功能。随后SUN公司对AWT进行改进,提供了Swing组件,Swing组件由纯Java语言编写,属于轻量级组件,可跨平台,Swing不仅实现了AWT中所有的功能,而且提供了更加丰富的组件和功能,足以满足GUI设计的一切需求。Swing会用到AWT中的许多知识,掌握了AWT,学习Swing就变成了一件很容易的事,因此将从AWT开始介绍图形用户的界面。

    AWT概述

    AWT是用于创建图形用户界面的一个工具包,它提供了一系列用于实现图形界面的组件,如窗口、按钮、文本框、对话框等。在JDK中对每一个组件都提供了对应的Java类,这些类都位于java.awt包中。在AWT中组件分为两大类,这两类的基类分别是ComponentMenuComponent。其中,MenuComponent是所有与菜单相关组件的父类Component则是除菜单外其他AWT组件的父类,它表示一个能以图形化方式显示出来并可与用户交互的对象

    Component类通常被称为组件,根据Component的不同作用,可将其分为基本组件类容器类基本组件类是诸如按钮、文本框之类的图形界面元素,而容器类则是通过Component的子类Container实例化的对象。Container类表示容器,它是一种特殊的组件,可以用来容纳其他组件。Container容器又分为两种类型,分别是WindowPanel

    1、Window

    Window类是不依赖其他容器而独立存在的容器,它有两个子类,分别是Frame类Dialog类。Frame类用于创建一个具有标题栏的框架窗口,作为程序的主界面,Dialog类用于创建一个对话框,实现与用户的信息交互。

    2、Panel

    Panel也是一个容器,但是它不能单独存在,只能存在于其他容器(Window或其子类)中,一个Pannel对象代表了一个长方形的区域,在这个区域中可以容纳其它组件。在程序中通常会使用Panel来实现一些特殊的布局。

    布局管理器

    组件不能单独存在,必须放置于容器中,而组件在容器中的位置和尺寸是由布局管理器来决定的。在java.awt包中提供了5中布局管理器,分别是FlowLayout(流式布局管理器)、BorderLayout(边界布局管理器)、GridLayout(网格布局管理器)和CardLayout(卡片布局管理器)。每个容器在创建时都会使用一种默认的布局管理器,在程序中可以通过调用容器对象的setLayout()方法设置布局管理器,通过布局管理器来自动进行组件的布局管理。例如把一个Frame窗体的布局管理器设置为FlowLayout,代码如下所示

    Frame frame=new Frame();
    frame.setLayout(FlowLayout());

    FlowLayout

    FlowLayout布局管理器的特点就是可以将所有组件像流水一样依次进行排列,不需要用户明确地设定,但是在灵活性上相对差了点。例如将上面的窗体拉伸变宽,按钮的大小和按钮之间的间距将保持不变,但按钮相对于容边距的距离会方生变化。

    BorderLayout

    BorderLayout(边界布局管理器)是一种较为复杂的布局方式,它将容器划分为5个区域,分别是东(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER)。组件可以放置在这5个区域中的任意一个。

    当向BorderLayout布局管理器的容器中添加组件时,需要使用add(Component comp,Object constraints)方法。其中,参数comp表示要添加的组件,constraint指定将组件添加到布局中的方式和位置的对象,它是一个Object类型,在传参时可以使用BorderLayout类提供的5个常量,它们分别是EAST、SOUTH、WEST、NORTH、CERTER。

    上面的代码为Frame容器设置了BorderLayout布局管理器(也可以不用设置Frame默认使用BorderLayout布局管理器),在容器的东、南、西、北、中五个区域放置了5个按钮。BorderLayout的好处就是可以限定各区域的边界,当用户改变容器窗口大小时,各个组件的相对位置不变。但需要注意的是,向BorderLayout的布局管理器添加组件时,如果不指定添加到哪个区域,则默认添加到CENTER区域,并且每个区域只能放置一个组件,如果向一个区域中添加多个组件时,后放入的组件会覆盖先放入的组件。

    GridLayout

    GridLayout(网格布局管理器)使用纵横线将容器分成n行m列大小相等的网格,每个网格中放置一个组件。添加到容器中的组件首先放置在第一行第一列(左上角)的网格中,然后在第一行的网格中从左向右依次放置其它组件行满后,继续在下一行中从左到右防止组件。与FlowLayout不同的是,放置在GridLayout布局管理器中的组件将自动占据网格的整个区域。

    GridBagLayout

    GridBagLayout(网格包布局管理器)是最灵活、最复杂的布局管理器。与GridLayout布局管理器类似,不同的是,它允许网格中的组件大小各不相同,而且允许一个组件跨越一个或者多个网格。

    使用GridBagLayout布局管理器的步骤如下。
    1)创建GridBagLayout布局管理器,并使该容器采用该布局管理器

    GridBagLayout layout=new GridBagLayout();
    container.setLayout(layout);

    2)创建GridBagContraints对象(布局约束条件),并设置该对象的相关属性。

    GrideBagConstraints constraints=new GridBagConstraints();
    constraints.gridx=1;//设置网格的左上角横向索引
    constraints.gridy=1;//设置网格的左上角纵向索引
    constraints.gridwidth=1;//设置组件横向跨越的网格
    constraints.gridheight=1;//设置组件纵向跨越的网格

    3)调用GridBagLayout对象的setConstraints()方法建立GridBagConstraints对象和受控组件之间的关联。

    layout.setConstraints(component,constraints);

    4)向容器中添加组件

    container.add(conponent);

    GridBagConstraints对象可以重复使用,只需要改变它的属性即可。如果要向容器中添加多个组件,则重复步骤(2)、步骤(3)、步骤(4)。

    从上面的步骤可以看出,使用GridBagLayout布局管理器的关键在于GridBagConstraints对象,它才是控制容器中每个组件布局的核心类,在GridBagConstraints类中有很多表示约束的属性。

    CardLayout

    在操作程序时,经常会遇到通过选项卡来切换程序中的界面,这些界面就相当于一张张卡片,而管理这些卡片的布局管理器就是卡片布局管理器。卡片布局管理器将界面看作是一系列卡片,在任何时候只有其中一张卡片是可见的,这张卡片占据容器的整个区域。

    相关文章

      网友评论

          本文标题:GUI(图形用户界面)上

          本文链接:https://www.haomeiwen.com/subject/ldvxectx.html