Java核心技术——卷I——Swing用户界面组件

构成用户界面的组件有三个特征:

1)内容,如,文本域中的文本。

2)外观(颜色、大小等)。

3)行为(对事件的反应)。

模型——视图——控制器(model——view——controller)模式,要求我们提供三个不同的对象:

1)模型:存储内容。

2)视图:显示内容。

3)控制器:处理用户输入。

模型存储内容,它没有用户界面。模型必须实现改变内容和查找内容的方法,模型是完全不可见的。显示存储在模式中的数据是视图的工作。控制器负责处理用户输入事件,然后决定是否把这些事件转化成对模型或视图的更改。

模型——视图——控制器模式的一个优点是:一个模型可以有多个视图,其中每个视图可以显示全部内容的不同部分或不同方面。下图显示了模型、视图和控制器之间的交互:

one

流布局管理器(flow layout manager)是面板的默认布局管理器。通常,组件放置在容器中,布局管理器决定容器中组件的位置和大小。容器本身也可以放置在另一个容器中。下图显示了Component的继承层次结构。

two

Container类中用于设置布局管理器的部分API如下所示:

three

边框布局管理器(border layoutmanager)是每个JFrame的内容窗格的默认布局管理器。它允许为每个组件选择一个位置。添加组件时可以指定BorderLayout类的CENTER,NORTH,SOUTH,EAST和WEST常量。如果没有提供值,系统默认为CENTER。边框布局会扩展所有组件的尺寸以便填满可用空间。

使用面板(panel)首先需要创建一个新的JPanel对象,然后逐一将组件添加到面板中。面板的默认布局管理器是FlowLayout。边框布局管理器的部分相关API如下:

four

网格布局,按行排列所有的组件。不过所有的组件大小都是一样的。在网格布局对象的构造器中,需要指定所需的行数和列数。添加组件时,从第一行的第一项开始,然后是第一行的第二项,以此类推。网格布局的相关部分API如下:

five

可以使用文本域(JTextField)和文本区(JTextArea)组件输入文本。文本域只能接收单行文本,而文本区能接受多行文本。JPasswordField也只能接收单行文本的输入,但不会将输入的内容显示出来。这三个类都继承自JTextComponent类。由于JTextComponent是一个抽象类,所以不能够构造这个类的对象。相关API如下:

six

seven

标签是容纳文本的组件,它们没有任何的修饰,也不能响应用户输入。可以利用标签标识组件。与其他组件一样,标签也可以放在容器中。相关的API如下:

eight

密码域是一种特殊类型的文本域,用户输入的字符不真正显示出来。每个输入的字符都是回显字符(echo character)表示,典型的回显字符是星号(*)。Swing提供了JPasswordField类来实现这样的文本域。相关的API如下:

nine

ten

当程序中放置一个文本区(JTextAera)组件时,用户就可以输入多行文本,并用回车键换行。每行都以一个“\n”结尾。在Swing中文本区没有滚动条。如果需要滚动条,可以将文本区放在滚动窗格中。同时,这是一种适用于所有组件的通用机制,而不是文本区特有的。也就是说,要想为组件添加滚动条,只需将它们放入一个滚动窗格中即可。相关的API如下:

eleven

与组件复选框相关的API如下:

twelve

thirteen

与组件单选按钮相关的API如下:

fourteen

fifteen

下图显示了与组件边框相关的API,同时在调用BorderFactory的静态方法创建方框时,有这几种可选的风格:凹斜面,凸斜面,蚀刻,直线,蒙版,空(只是在组件外围创建一些空白空间)。

sixteen

seventeen

组合框。当用户点击这个组件时,会下拉一个选择列表,用户可以从中选择一项。如果下拉列表被设置成可编辑,就可以像这是一个文本域一样编辑当前的选项内容,它将文本域的灵活性与一组预定义的选项组合起来。JComboBox类提供了组合框组件。注意,编辑只会影响选择的项,而不会改变选择列表的内容。相关的API如下:

eighteen

nineteen

混动条允许从连续值中选择,在构造滑动条时,如果省略最小值、最大值和初始值,其默认值分别为0,100和50。可以通过显示刻度对滑动条进行修饰。相关的API如下:

twentyOne

twenty