==============java核心技术卷1第12章----Swing用户界面组件===========主要内容:1 swing和模型-视图-控制器设计模式2布局管理
3文本输入4选择组件
5菜单
6布局管理
7对话框、排错===========================================================
1、模型-视图-控制器模式并不是AWT 和Swing 设计中使用的唯一模式。下列是应用的另外几种模式:
•容器和组件是“ 组合(composite )” 模式
•带滚动条的面板是“ 装饰器(decorator)” 模式
•布局管理器是“ 策略(strategy )” 模式
不要用一个按钮类完成所有的事情, 而是应该让一个对象负责组件的观感, 另一个对象负责存储内容。模型-视图- 控制器(MVC) 模式告诉我们如何实现这种设计,实现三个独立的类:
•模型(model ): 存储内容。
•视图(view): 显示内容。
•控制器(controller): 处理用户输入。
模型-视图-控制器模式的一个优点是一个模型可以有多个视图, 其中每个视图可以显示全部内容的不同部分或不同形式。
2、通常, 组件放置在容器中, 布局管理器决定容器中的组件具体放置的位置和大小。按钮、文本域和其他的用户界面元素都继承于Component 类, 组件可以放置在面板这样的容器中。由于Container 类继承于Component 类, 所以容器也可以放置在另一个容器中。
每个容器都有一个默认的布局管理器,但可以重新进行设置。
边框布局管理器(border layout manager) 是每个IFrame I 的内容窗格的默认布局管理器。流布局管理器完全控制每个I组件的放置位置,边框布局管理器则不然,它允许为每个组件选择一个放置位置。
网格布局像电子数据表一样, 按行列排列所有的组件。不过,它的每个单元大小都是一样的。
3、文本域( JTextField) 和文本区( JTextArea) 组件用于获取文本输人。文本域只能接收单行文本的输人, 而文本区能够接收多行文本的输人。JPassword 也只能接收单行文本的输人,但不会将输入的内容显示出来。这三个类都继承于JTextComponent 类。
把文本域添加到窗口的常用办法是将它添加到面板或者其他容器中,这与添加按钮完全一样:
]Panel panel = new ]Panel ();
JTextField textField = new JTextField("Default input", 20) ;
panel ,add(textField);
标签是容纳文本的组件, 它们没有任何的修饰(例如没有边缘),也不能响应用户输入。
要想用标识符标识这种不带标签的组件, 应该
1 ) 用相应的文本构造一个JLabel 组件。
2 ) 将标签组件放置在距离需要标识的组件足够近的地方, 以便用户可以知道标签所标识的组件。
4、复选框需要一个紧邻它的标签来说明其用途。在构造器中指定标签文本。
bold = new ]CheckBox("Bold");
在Swing 中,实现单选钮组非常简单。为单选钮组构造一个ButtonGroup 的对象。然后,
再将JRadioButton 类型的对象添加到按钮组中。按钮组负责在新按钮被按下时,取消前一个
被按下的按钮的选择状态。
可以在任何继承了JComponent的组件上应用边框。最常用的用途是在一个面板周围放置一个边框, 然后用其他用户界面元素(如单选钮)填充面板。
当用户从组合框中选择一个选项时, 组合框就将产生一个动作事件。组合框可以让用户从一组离散值中进行选择。滑动条允许进行连续值的选择。
5、菜单栏是一个可以添加到任何位置的组件。通常放置在框架的顶部。
复选框和单选钮菜单项在文本旁边显示了一个复选框或一个单选钮。 当用户选择一个菜单项时,菜单项就会自动地在选择和未选择间进行切换。
弹出菜单(pop-up menu) 是不固定在菜单栏中随处浮动的菜单。
可以通过在菜单项的构造器中指定一个快捷字母来为菜单项设置快捷键:JMenuItem aboutltem = new ]HenuItem("About", 'A');
6、网格组布局是所有布局管理器之母。可以将网格组布局看成是没有任何限制的网格布局。在网格组布局中, 行和列的尺寸可以改变。可以将相邻的单元合并以适应较大的组件( 很多字处理器以及HTML 都利用这个功能编辑表格: 一旦需要就合并相邻的单元格)。 组件不需要填充整个单元格区域, 并可以指定它们在单元格内的对齐方式。
将一个组件定位到某个绝对定位的步骤:
1 ) 将布局管理器设置为null。
2 ) 将组件添加到容器中。
3 ) 指定想要放置的位置和大小。
定制布局管理器必须实现LayoutManager接口。
7、JOptionPane 有4 个用于显示这些对话框的静态方法:
showMessageDialog:显示一条消息并等待用户点击OK
showConfirmDialog:显示一条消息并等待用户确认(与OK/Cancel 类似)
showOptionDialog:显示一条消息并获得用户在一组选项中的选择
showInputDialog:显示一条消息并获得用户输人的一行文本
要想实现一个对话框,需要从JDialog 派生一个类。这与应用程序窗口派生于JFrame 的过程完全一样。具体过程如下:
1 ) 在对话框构造器中,调用超类JDialog 的构造器。
2 ) 添加对话框的用户界面组件。
3 ) 添加事件处理器。
4 ) 设置对话框的大小。
在调用超类构造器时,需要提供拥有者框架(ownerframe)、 对话框标题及模式特征。
如果希望得到GUI 应用中生成的每一个AWT 事件的记录, 可以在发出事件的每一个组件中安装一个***。利用反射, 可以很容易地自动完成这个工作。
Robot 类可以向任何AWT 程序发送按键和鼠标点击事件。这个类就是用来自动测试用户界面的。要得到一个机器人, 首先需要得到一个GraphicsDevice 对象。
需要在一个单独的线程中运行机器人。