zoukankan      html  css  js  c++  java
  • 从零开始学Java 第16章 图形编程

    第16章  图形编程
    前面编写的程序,都是使用控制台来进行数据的输入与程序的输出。这样对程序的使用者来说这样是不够美观也不够友好的。本章的主要内容是介绍Java中的图形界面编程,目前Java图形界面编程主要用的是Swing技术,本章的主要内容就是介绍Swing的基本知识。
    16.1  Swing概述
    Swing是SUN公司推出的第二代图形编程包。使用Swing技术可以开发出功能强大,界面友好的图形界面程序。Swing不仅提供了具有完善功能的组件,而且有很好的扩展性,使用开发者可以方便的完成图形界面程序的开发。
    16.1.1  AWT简介
    说起Swing组件就不得不提AWT,AWT的Java推出的第一代图形编程技术。AWT的全称是Abstract Window Toolkit,即抽象窗口工具包。

    1.AWT常用类

    2.AWT层次

    3.AWT示例
    16.1.2  AWT与Swing比较
    与Swing相比,AWT提供的控件数量有限。例如在Swing中的JTable等组件在AWT中就没有。而且AWT组件都是重量级组件,它是基于程序运行的操作系统的。当编写面对不同平台的应用程序的时候,对于不同的平台,可能需要修改原来的代码。这样就违背了Java“一次编写,处处运行”的宗旨。而Swing则是用Java写成的,它是轻量级的,不用针对不同的平台进行修改。
    Swing出现并不是替换掉AWT的。它只是提供了更丰富的开发控件和良好的用户体验,Swing仍然采用了AWT1.1提供的事件处理机制。因此在开发中Swing和AWT都会用到。但是控件尽量采用全Swing组件,如果混用AWT的和Swing组件可能会出现意想不到的错误。
    AWT提供的重量级组件是基于本地系统的。而Swing提供的轻量级控件是由纯Java编写的,在混用的时候可能会出现相互遮挡的关系。
    16.2  窗体和面板
    通过前面一节介绍,读者应该对Swing编程有了初步的认识,并了解了它的一些特性。从本节开始,本书将会介绍如何构建自己的Swing应用程序。读者通过这些学习能够把自己的想法转换为图形界面的应用程序编写出来。
    16.2.1  创建窗体
    Java中的顶层窗口被称为框架。在AWT中有一个窗体框架Frame,对应在Swing组件中该组件就是JFrame,它是从Frame扩展而来的。框架是一种容器,它可以容纳按钮、文本框、复选框等组件。窗体是框架中最常用的,本节的主要内容是介绍框架的使用。
    1.窗体构造函数

    2.窗体常用方法

    16.2.1  创建窗体
    16.2.2  使用面板
    在前面窗口中,显示的文字信息是直接在窗口中显示的。这种风格实际上是不被推崇的,在Java中窗体实际上被设计为组件的容器。用容器可以存放菜单、按钮等组件,通常情况下是把这些组件绘制在一个组件上,然后把这个组件添加到窗体上。这种作为组件存放集合的叫做面板(Panel)。面板就有两个特点:
    1.可以在上边完成绘制工作

    2.本身也可以存放其它的组件

    16.3  事件处理
    在了解了如何创建简单的窗体和面板之后,需要创建复杂一点的图形界面程序。这时候就需要使用事件处理机制,通过它可以对用户的键盘、鼠标触发的事件进行处理。Swing采用了AWT1.1的事件处理机制,本节将会其进行介绍。
    16.3.1  事件处理模型

    要理解Java的事件处理机制,首先要明白几个概念,事件源和监听器。当用户与图形界面交互的时候,会通过鼠标或是键盘与程序进行信息的交互。而程序需要对这些不同的事件进行不同的处理,这就牵扯到两个概念:事件源和事件监听器。
    在事件处理之前要把监听器注册到事件源。这样监听器才能对事件源触发的事件进行处理,监听器会对事件进行相应的处理。
    在事件处理机制中,最顶层的事件类型是EventObject。该类属于java.util包该类定义了一个非常重要的方法getSource()方法。
    16.3.2  窗体事件
    窗体事件类java.awt.event.WindowEvent是描述窗体的各类事件的类。该类能当打开、关闭、激活、停用、图标化或取消图标化窗体对象时,或者焦点转移到窗体内或移出窗体时,由窗体对象生成低级别事件。该类对应了三个接口:
    1.WidowFocusListener接口
    2.WindowListener接口
    3.WindowStateListener接口

    16.3.3  事件适配器
    事件适配器就是实现了一个或多个监听接口的类。适配器为接口的事件处理方法都提供了空的实现,在使用的时候可以继承适配器类并重写需要的事件处理方法。这样能避免大量的不必要编码。Java提供的适配器有如下:
    ComponentAdapter实现了ComponentListener、EventListener接口;
    ContainerAdapter实现了ContainerListener、EventListener接口;
    FocusAdapter实现了FocusListener、EventListener接口;
    KeyAdapter实现了KeyListener、EventListener接口;
    MouseAdapter实现了MouseListener、MouseMotionListener、MouseWheelListener、EventListener接口;
    MouseMotionAdapter实现了MouseMotion、EventListener接口;
    WindowAdapter实现了WindowFocusListener、WindowListener、WindowStateListener、 EventListener接口。

    16.4  常用组件
    在Swing中提供了丰富则组件,本节主要介绍Swing中的各种组件。主要有JLabel组件、JButton组件、JTextField文本框、JChekBox复选框、JRadioButton单选按钮、JComboBox组合框、JTabbedPane选项卡和JScrollPane滚动条。本节会对各类组件进行介绍。
    16.4.1  JLabel类
    JLabel是标签类,使用标签类可以建立包含文本、图像或是两者都包含的标签。该控件主要用来显示提示信息。

    1.构造函数

    2.常用方法

    3.常量

    16.4.2  JButton类
    Jbutton类是Swing提供的最简单按钮类型。当按钮按下去的时候会触发事件,给按钮注册相应的监听器,按下按钮后就能执行相应的代码。
    1.JButton动作事件
    2.监听器与事件源

    16.4.3  JTextField类
    JTextField类是Swing中提供的文本框.通过它可以获得用户的输入,但是文本输入是单行的。下面是它的构造函数:
    public JTextField()构建一个新的文本框,该文本框的默认值为空。
    public JTextField(String text)创建一个新的文本框,文本框中有text指定的内容。
    public JTextField(int columns)创建一个有指定列数的文本框。
    public JTextField(String text,int columns)创建一个具有指定文本和列数的文本框。
    文本框也可以添加事件,当输入文本按下回车键的时候会触发事件。给文本框添加事件使用的方法是public void addActionListener(ActionListener l)。使用下面的方法从文本框删除事件:
    public void removeActionListener(ActionListener l)

    16.4.4  JCheckBox类
    JCheckBox类描述的是Swing中的复选框,当需要用户多个选择的时候会用到。
    1.构造函数
    该类的构造函数如下:
    public JCheckBox()创建一个没有文本、没有图标并且最初未被选定的复选框。
    public JCheckBox(Icon icon)创建有一个图标、最初未被选定的复选框。
    public JCheckBox(Icon icon,boolean selected)创建一个带图标的复选框,并指定其最初是否处于选定状态。
    public JCheckBox(String text)创建一个带文本的、最初未被选定的复选框。
    public JCheckBox(Action a)创建一个复选框,其属性从所提供的Action获取。
    public JCheckBox(String text,boolean selected)创建一个带文本的复选框,并指定其最初是否处于选定状态。
    public JCheckBox(String text,Icon icon)创建带有指定文本和图标的、最初未选定的复选框。

    16.4.5  JRadioButton类
    JRadioButton描述了Swing中的单选按钮,该类描述的按钮只能选择一个,而不能像复选框那样选择多个。
    1.构造函数
    该类的构造函数如下:
    public JRadioButton()创建一个初始化为未选择的单选按钮,其文本未设定。
    public JRadioButton(Icon icon)创建一个初始化为未选择的单选按钮,其具有指定的图像但无文本。
    public JRadioButton(Icon icon,boolean selected)创建一个具有指定图像和选择状态的单选按钮,但无文本。
    public JRadioButton(String text)创建一个具有指定文本的状态为未选择的单选按钮。

    16.4.6  JComboBox类
    JComboBox类描述了Swing的下拉列表。组合框会显示一个条目,但是它允许用户选择下拉列表中的条目。
    1.构造函数
    该类的构造函数如下:
    public JComboBox()创建具有默认数据模型的JComboBox。
    public JComboBox(Vector<?> items)创建包含指定Vector中的元素的JComboBox。
    public JComboBox(Object[] items)创建包含指定数组中的元素的JComboBox。
    16.4.7  JTabbedPane类
    JTabbedPane类是Swing中描述选项卡组件的类。它显示的是一个组件选项卡,通过选择它能转到不同的界面。
    1.构造函数
    2.选项卡使用过程

    16.5  窗体布局
    在容器中所有组件的布局都由布局管理器来控制。每个容器,如Panel、Windows或Frame都有各自默认的布局管理器,程序员也可以在程序中指定一个新的布局管理器。java.awt类包中包含五种布局管理器:FlowLayout、BorderLayout、GridLayout、CardLayout、GridBagLayout。本节的内容就是对这各种布局进行介绍。
    16.5.1  流式布局FlowLayout布局
    FlowLayout布局方式是将组件一排一排地依次放置。它自动调用组件的getPreferredSize()方法,使用组件的最佳尺寸来显示组件。当容器被重新设置大小后,则布局也会随之发生改变:各组件的大小不变,但相对位置会发生变化。
    1.构造函数

    2.布局方式

    16.5.2  边界布局BorderLayout布局
    BorderLayout布局方式提供了更复杂的布局控制方法。它包括5个区域:North, South, East, West和Center,其方位依据上北下南左西右东。当容器的尺寸发生变化时,各组件的相对位置不变。但中间部分组件的尺寸会发生变化,南北组件的高度不变,东西组件的宽度不变。
    1.构造函数
    2.布局使用

    16.5.3  网格布局GridLayout布局
    GridLayout布局方式可以使容器中的各组件呈网格状分布。容器中各组件的高度和宽度相同,当容器的尺寸发生变化时,各组件的相对位置不变,但各自的尺寸会发生变化。各组件的排列方式:从左到右,从上到下。与BorderLayout类相类似,如果想在一个网格单元中添加多个组件,则必须先在该网格单元放一个Panel容器,再将多个组件放在该Panel容器中。
    1.构造函数

    2.常用方法

    16.5.4  卡片布局CardLayout布局
    CardLayout布局方式可以帮助用户处理两个或更多的组件共享同一显示空间。共享空间的组件之间的关系就像一摞牌一样,它们摞在一起,只有最上面的组件是可见的。CardLayout可以象换牌一样处理这些共享空间的组件:为每张牌定义一个名字,可按名字选牌,可以按顺序向前或向后翻牌,也可以直接选第一张或最后一张牌。
    1.构造函数

    2.常用方法

    16.5.5  网格包布局GridBagLayout布局
    GridBagLayout布局方式是AWT中最灵活、同时也是最复杂的一种布局方式。与GridLayout相同,它也是将容器中的组件按照行、列的方式放置,但各组件所占的空间可以互不相同。GridBagLayout根据对每个组件所施加的空间限制、每个组件自身所设定的最小尺寸和最佳尺寸来为每个组件分配空间。对组件施加空间限制是通过类GridBagConstraints来实现的。
    1.GridBagConstraints属性
    (1)gridx, gridy
    (2)gridwidth, gridheight
    (3)fill
    (4)ipadx, ipady
    (5)nsets (Insets)
    (6)archor(int)
    (7)weightx, weighty(double)

    16.6  简单计算器
    本节介绍一个简单的计算器的程序。在计算器的顶部需要一个标签显示计算的数字以及结果,可以通过边框布局的NORTH放在顶部,而其按键可以由网格布局来指定。它的显示效果如图16.24:
    16.7  小结
    本章的主要内容对Java的图形界面程序编程进行了简单的介绍。Java的图形编程是非常复杂的机制,甚至可以说是Java里面最复杂的机制了。仅仅用一章的内容来介绍只能是介绍一些皮毛的知识,一些高级的应用是不能满足开发需求的,还是需要读者自己去学习,去查阅一些专门的Swing、AWT书籍。

  • 相关阅读:
    算法之路 level 01 problem set
    算法原理与实践(链表)
    散列表(HashTable)
    系统设计与实践(实战演练)
    桶排序 + 基数排序
    算法原理与实践(二叉树)
    Total Difference String
    【翻译】std::list::remove
    【翻译】std::remove
    Observer模式实践
  • 原文地址:https://www.cnblogs.com/yoogoo/p/2467278.html
Copyright © 2011-2022 走看看