GUI总结概要

图形程序设计入门

学习目标

    描述java图形程序设计类的层次结构

 使用框架、面板和简单用户界面GUI组件

  布局管理器

    在面板上绘制组件

–paintComponent方法

¨      

¨     熟悉Colors, Fonts, and Font Metrics

¨     绘制几何图形

¨     理解事件驱动程序设计的概念

–事件源,监听器和监听接口 Listener Interface

早期的Java图形界面设计采用AWT组件:

    现代的程序中,图形化的使用者接口(GUI)相当重要,良好的GUI可以让程序更具吸引力、更好操作、更容易学习。虽然 Java 早就有 AWT,可以用来设计 GUI,但是 AWT 有两大缺失:

     AWT 只提供最基本的组件(比方说:按钮、滚动条等),而不提供 TreeView 等现代化GUI组件。更糟的是,AWT 的组件还只提供最基本的功能,比方说:按钮上面只能出现文字,不能出现图形。(当然,你也可以利用继承的方式来设计出图文兼容的按钮,但这还要花不少额外的时间。)

    不能跨平台:AWT透过「同位体系统(peer system)」来和操作系统沟通。比方说:如果你建立一个按钮(Button)对象,就会有一个按钮同位体(ButtonPeer)对象被建立,此按钮同位体对象会请底层的操作系统建立一个真正的按钮。如果此程序是在 Windows 98上执行,所建立的按钮自然是 Windows 98 的按钮。AWT组件的外观就会受到底层操作系统的影响。

目前更流行的是Swing组件:

    Swing 是由 Sun 公司研发设计。有了 Swing,上述的问题都迎刃而解。Swing 不但填补了 Java GUI 不能跨平台的缺点,也提供许多新的组件,可以用来组合出复杂的用户界面,除此之外,Swing 也为 Java 注入新的特色,支持包括了拖放功能(drag-and-drop)、复原(undo)、并允许使用者改变 GUI 的外观(look and feel)。Swing 组件都是「轻量级的(lightweight)」。

     Swing是一个带有丰富组件的GUI工具包,它组成了JFC(Java Foundation Class)的用户界面功能的核心部分,它不仅是AWT所提供的组件的替代品,并且在这些组件的基础上有了很大进步。Swing 都是100% Java的,不依赖具体的Windows系统,可以在各种平台上实现。Swing包含了250多个类,提供了40多个组件,是AWT组件的四倍,Swing还提供了大量有助于开发GUI界面所需的附加组件,它们都定义在javax.swing扩展包中。为了和原来的java.awt包区别开来,SUN专门为Swing设置了扩展包(javax.swing),并规定所有的Swing组件都是以字母“J”开头,如JLableJButtonJTextField等,以示和AWT组件进行区别。

      Swing组件不能取代AWT组件,因为Swing 是架构在 AWT 之上的,没有 AWT 就没有Swing。它只能替代AWT的用户界面组件,辅助类仍保持不变,并且仍然使用AWT的事件模型。

 

图形程序设计所用类层次结构 (Swing)

¨     
图形类可以分为三组:容器类、组件类和辅助类。

¨     容器类:如JframeJpanelJapplet等,用来包含其他组件。

容器是图形用户界面中容纳其他组件的部分,一个容器中可以容纳一个或多个组件,甚至还可以容纳其他容器。

¨     组件类:如JButtonJTextFieldJTextAreaJComboBoxJListJRadioButtonJMenu等,都是JComponent类的子类。

组件通常为图形用户界面中的可见部分,例如按钮和标签等。通过add()方法可以将组件加入容器并显示出来。

¨     辅助类:如ColorFontFontMetricsDimensionLayoutManager等,是组件和容器用于绘制和放置对象的。

 

框架

 

¨      框架是一个不被其它窗体所包含的独立的窗体,是在java的图形化应用中容纳其它用户接口组件的基本单位。

¨     Frame类是用来创建一个窗体的。


UI (用户接口组件)

¨     要创建一个用户界面,需要创建一个框架或applet来存放用户界面组件。

¨     框架或applet可以包含菜单、面板和用户界面组件。面板用于分组存放用户界面组件,还可以存放其他面板。

 

 

 

创建框架

 

¨     下面两个构造方法用来创建Jframe对象:

l publicJFrame()

声明并创建一个没有标题的Jframe对象。

l publicJFrame(String title)

声明并创建一个指定标题的Jframe对象。

¨     源程序:MyFrame.java

¨     注意:为使之在JDK1.2中运行,需注释掉 EXIT_ON_CLOSE 相关的语句。

框架居中

 

¨     默认情况下,窗体将显示在显示器的左上角为了让框架显示在指定位置,须用JFrame类中的setLocation(x,y) 方法。

¨     要把框架放在屏幕上居中的位置,需要知道屏幕和框架的宽和高。

¨     屏幕的宽和高可由java.awt.Toolkit类得到:

Dimension screenSize =Toolkit.getDefaultToolkit().getScreenSize();

int screenWidth = screenSize.width;

int ScreenHeight =screenSize.height;

¨     框架的宽和高可由Component类中的getSize方法得到:

Dimension frameSize =frame.getSize();

int frameWidth = frameSize.width;

int frameHeight = frameSize.height;

在框架中添加组件

 

 

 

¨      使用add方法可以在框架的内容窗格中添加组件:

              //在框架中添加一个Button组件

frame.getContentPane().add(newJButton("OK"));

¨     源程序:MyFrameWithComponents.java

 

 

布局管理器

 

¨      Java的布局管理器提供了一层抽象,自动把用户界面映射到所有的窗口系统。

¨     JavaGUI组件放在容器中放置。这些GUI组件由容器的布局管理器来安排位置。

前面的程序中并没有指定”OK”按钮在框架中的放置位置,但Java知道该把按钮放在哪里,因为在后台工作的布局管理器能够将组件放到正确的位置。默认情况下,Jframe的内容窗格默认的布局管理器是BorderLayout

¨     布局管理器设置在容器中,设置的语法如下:

              container.setLayout(newSpecificLayou());

设置好布局管理器后,就可以向容器内添加组件。要将组件添加到容器,使用add方法。要从容器中删除一个组件,使用remove方法。

容器container可以是框架或applet的内容窗格,或是JPanel的一个实例。

布局管理器的种类

 

 

¨      FlowLayout

¨     GridLayout

¨     BorderLayout

¨      CardLayout

¨      

¨     GridBagLayout

布局管理器FlowLayout

¨     FlowLayout是最简单的布局管理器。它按添加组件的顺序由左到右将组件排列在容器中,一行排满后再排新的一行。

¨     FlowLayout的三个构造方法:

• public FlowLayout(int align,int hGap,intvGap)

    根据指定的对齐方式、水平间距和垂直间距构造一个新的FlowLayout对象。间距指组件之间用像素度量的距离。

对齐方式可以使用三个常量之一来指定,这三个常量是:FlowLayout.RIGHTFlowLayout.CENTERFlowLayout.LEFT

• public FlowLayout(int align)

    根据指定的对齐方式构造一个新的FlowLayout对象,默认水平、垂直间距都是5个像素。

• public FlowLayout()

    构造一个新的FlowLayout对象,默认的对齐方式是居中,默认水平、垂直间距都是5个像素。

¨      8.1:测试FlowLayout 布局管理器

 

 

 

按添加的顺序从左到右将组件排列在容器中。一行排满后,再排新的一行。

源程序:ShowFlowLayout.java

 

 

 

 

布局管理器GridLayout

 

¨      FGridLayout根据构造方法定义的行数和列数以网格(矩阵)的形式排列组件,组件按添加的顺序从左到右排列。

¨     FGridLayout的三个构造方法:

•public GridLayout(int rows,int columns, int hGap, int vGap)

    该方法以指定的行数和列数构造一个新的GridLayout对象,组件在容器上的水平和垂直间距也按指定值设置。

•public GridLayout(int rows,int columns)

该方法以指定的行数和列数构造一个新的GridLayout对象,组件的水平和垂直间距设为0。

•public GridLayout()

    该方法以每行一列的方式构造一个新的GridLayout对象。

¨      8.2:测试GridLayout布局管理器

 

 

布局管理器GridLayout根据构造方法定义的行数和列数以网格(矩阵)的形式排列组件。首先是第一行,接着是第二行,如此下去。

源程序:ShowGridLayout.java

 

 

布局管理器BorderLayout

¨      BorderLayout布局管理器将窗口分成五部分:东区、南区、西区、北区、中央。使用add(component,index)方法将组件添加到BorderLayout布局管理器中。

¨      add(Component,index)方法中, index是一个常量,取值为:BorderLayout.East, BorderLayout.South,BorderLayout.West, BorderLayout.NorthBorderLayout.Center

¨      BorderLayout的两个构造方法:

         public BorderLayout(int hGap,int vGap)

该方法根据指定的水平和垂直间距来构造新的BorderLayout布局管理器。

         public BorderLayout()

该方法构造新的BorderLayout布局管理器,组件之间没有水平和垂直间距。

¨      组件根据它们最合适的尺寸和在容器中的位置来放置。南、北组件可以水平扩展,东、西组件能够竖直拉伸,中央组件既可以水平也可以竖直扩展以填满空白空间。

¨      Example8.3测试 BorderLayout布局管理器

本例使用BorderLayout布局管理器在框架中放置东、西、南、北和中央按钮。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值