GUI组件上的图形操作

    技术2022-05-18  22

    GUI图形用户界面(Granhical User  Interface)

    一、AWT(Abstract Window Toolkit)的基础知识

    1、JDK中提供AWT和Swing两个包,用于GUI程序的设计开发。

    2、GUI组件可以分为两大类,基本组件和容器,分别是java.awt.Component和java.awt.Container的直接或间接的子类。

    3、程序的GUI部分由AWT线程管理。

    二、AWT事件处理

    1、事件处理机制

    2、事件分类

    3、事件监听器

    4、事件适配器

    5、灵活设计事件监听器类

    6、用匿名内置类实现事件监听器

    三、事件处理机制   3个重要概念

    1、事件:用户对组件的一个操作,称为一个事件

    2、事件源:发生事件的组件就是事件源

    3、事件处理器:某个java类中的负责处理事件的成员方法

    事件分类

    1、按事件的物理操作和GUI组件的表现效果进行分类:

          MouseEvent  鼠标事件   WindowEvent  窗口事件   ActionEvent   动作事件

    2、事件的性质分类: 低级事件和语义事件(高级事件)

    四、事件监听器

    1、一个事件监听器负责处理一类事件

    2、一类事件的每一种发生情况,分别由事件监听器对象中的一个方法来具体处理

    3、在事件源和事件监听器对象中进行约定的接口类,被称为事件监听器接口

    4、事件监听器接口类的名称与事件类的名称是相应的,如:MouseEvent事件类的监听器接口名为MouseListener   

    总结:

    处理发生在某个GUI组件上的XxxEvent事件的某种情况,其事件处理的通用编写流程:

    1、编写一个实现了XxxEvent接口的事件监听器类

    2、XxxEvent类中的用于处理该事件情况的方法中,编写处理代码

    3、调用组件的addXxxListener方法,将类XxxListener创建的实例对象注册到GUI组件上。

    五、事件适配器

    由于监听器实际上就是实现了相应接口的类,而接口一般要求实现许多方法,如接口WindowListener中有7种方法,并不是所有的方法都是需要的,若实现该接口则要求实现所有的抽象方法。为了简化,java语言为一些接口提供了事件适配器(Adapter)。事件适配器是抽象类。通过继承事件适配器,重写需要的方法,不用的方法无须重写。

        java.awt.event包中提供了以下几个事件适配器:

        ComponentAdapter   组件适配器

        ContainerAdapter      容器适配器

        FocusAdapter             焦点适配器

        KeyAdapter                键盘适配器

        MouseAdapter            鼠标适配器

        MouseMotionAdapter  鼠标移动适配器

        WindowAdapter          窗口适配器

    用事件适配器类处理事件,可以简化事件监听器的编写。

    六、修改组件的默认事件处理方式

    1、只有在一个组件注册了事件监听器对象后,组件才会产生相应的对象

    2、默认的processEvent方法调用processXxxEvent方法

    3、调用enableEvent(Longevent ToEnable)方法,可以在即使没有注册事监听器的情况下,组件也能够对某些类型事件进行相应和产生相应的事件对象。

    七、Graphics类与图形绘制

    Graphics类是java图形处理的基础,它支持两种绘图:一种是基本的绘图,如画线、画圆、矩形等;一种是画图像,主要用于动画制作等。

    Graphics类代表画笔,提供了一系列的方法类实现基本图形元素的绘制,只要组合使用这些图形绘制方法,就可以得到想要的复杂图形。实际上Graphics类是一个抽象类,他提供的方法大部分都是抽象的方法。常见的有:

       draw Line(int x1,int y1,int x2,int y2)画一条直线

       drawString(String str,int left,int bottom):写一个字符串

       drawImage(Image image,int left,int top,ImageObserver observer):画一个图片

       drawOval(int x,int y,int width,int height):画一个椭圆

       drawRect(int left,int top,int width,int height):画一个矩形

       fillRect(int left,int top,int width,int height):填充一个矩形

       fillOval(int x,int y,int width,int height):填充一个椭圆

    可以为Graphics对象设置绘图颜色和字体属性,方法为:

      setColor(Color color):设置画笔的颜色

      setFont(Font font):设置画笔的字体

    如果程序没有显示调用Graphics对象的setColor()方法,Graphics对象将以组件的前景色作为默认的绘图颜色。drawString(String str,int s,int y)方法使用当前画笔的颜色和字体,将参数str的内容显示出来,并且最左边的字符的基线从坐标(x,y)开始。drawLine(int x1,int x2,int y1,int y2)表示画出一条直线,坐标(x1,y1)表示直线的起始点,坐标(x2,y2)表示直线的终点。

     八、双缓冲技术

    1、Component.creatImage方法创建内存Image对象

    2、在Image对象上进行绘制的结果就成了一副图像

    3、在image对象上执行与组件表面同样的绘制,image对象中的图像是组件表面内容的复制,当组件重画时,只需将内存中的image对象在组件上画出。

    九、常用的AWT组件

    Canvas组件

    1、Canvas是具有最基本和最简单的GUI功能的组件

    2、Canvas代表屏幕上一块空白的矩形区域,程序能够在这个部件表面绘图,也能够捕获用户的操作,产生相应的事件

    3、当要设计定制的具有GUI功能的组件类时,继承Canvas将会大大简化编程难度。

    十、菜单

    1、一个完整的菜单系统有菜单条,菜单和菜单项组成

    2、java中与菜单相关的类有:MenuBar(菜单条);Menu(菜单);MenuItem(菜单项)

    3、setActionCommand方法的作用

    十一、Container

    1、组件不能独立的显示出来,只能放在容器里

    2、Container是所有容器类的父类,Container.add方法用于将组件添加到容器中。

    3、Container也是Component的子类,因此也可以作为组件添加到其它容器上。

    十二、Dialag与FileDialag类

    1、Dialag类用于产生对话框

    2、对话框分为模态对话框和非模态对话框:

    3、常用的两个构造方法:

        public Dialag(Frame owner,String title)

        public Dialag(Frame owner,String title,boolean modal)

    十三、Checkbox组件

    1、checkbox用类建立单选按钮和多选按钮

    2、创建多选按钮,只需要使用构造函数:

       checkbox(String label,boolean state,CheckboxGroup group)

    3、单选按钮和多选按钮的语义事件为ItemEvent,对应的监听器接口为ItemListener,该接口只有一个itemStatsChange方法

    十四、Choice

    1、Choice类用来制作单选下拉列表框

    2、choice类的语义事件为itemEvent,对应的监听器接口为itemListener,该接口只有一个itemStatsChange方法

    十五、Panel与ScrollPane类

    1、Panel类是一个容器类,用于产生一种特殊的空白面板,可以容纳其它的组件,但不能独立存在。

    2、ScrollPane类是一种容器类,用于产生滚动窗口,通过滚动条在一个较小的容器窗口中显示较大的子部件。

    布局管理器

    1、一个容器中各个组件之间位置和大小关系就称之为布局。java语言提供了布局管理器来管理组件在容器中的布局,而不是直接使用位置坐标来设置各个组件的位置大小。

    2、java为了实现跨平台的特性并获得动态的布局效果,将容器内的所有组件的大小、位置、顺序、间隔等交给布局管理器负责,共有5种布局管理器:FlowLayout、BorderLayout、GridLayout、CardLayout、GridBagLayout。所有的容器都会引用一个布局管理器实例,通过它来自动进行组件的布局管理。

    3、默认的布局管理器

       当一个容器被创建后,它们有相应的默认布局管理器。Window、Frame和Dialag的默认布局管理器是BorderLayout,Panel的默认布局管理器是FlowLayout。

    4、流式布局管理器(FlowLayout)

    FlowLayout是把组件从左向右、从上向下,一个接着一个的放在容器中,组件之间的默认间隔(水平和垂直)为5个像素,默认的组件对齐方式为居中,组件的大小由布局管理器根据组件的最佳尺寸类决定。

      FlowLayout的构造方法如下:FlowLayout(int align,int hgap,vgap)

    功能:参数align用类决定组件在每行中相对于容器的边界对齐方式。参数hgap,vgap分别设定组件之间的水平和垂直间隙。

    5、边界布局管理器(BorderLayout)

    BorderLayout是Window、Frame、Dialog的默认布局管理器,它将容器分成5个区域来安排组件:North、South、East、West、Center。    BorderLayout的构造方法如下:  BordreLayout(int hgap,int vgap)

    功能:参数hgap和vgap分别设定组件之间的水平和垂直间隙。

    6、网格布局管理器(GridLayout)

    GridLayout是将容器分为一个个格子,按行依次排列组件,各组件大小相同。

    GridLayout的构造方法如下:  GridLayout(int  rows,int cols,int hgap,int vgap)

    功能:rows代表行数,cols代表列数,hgap和vgap规定网格之间的水平和垂直间隙。

    7、卡片布局管理器(CardLayout)

    CardLayout将界面看成一系列卡片,在任何时候只有一张卡片是可见的,这张卡片占据容器的整个区域。

    CardLayout的构造方法:CardLayout(int hgap,int vgap)

    功能:参数hgap表示卡片和容器左右边界值之间的间隙,参数vgap表示卡片和容器上下边界的间隙。

    8、取消布局管理器

    调用Container.setLayout(null)方法取消布局管理器设置,在这种情况下,可以调用Component.setBounds方法来用绝对坐标设置

    容器上的每个组件的大小和位置

    不适用布局管理器将会给程序带来潜在的问题,当容器大小改变时,所有组件保持原来的大小和位置,导致程序界面“难看”


    最新回复(0)