基于JavaUI代理的图形用户界面设计模式
基于Java UI代理的图形用户界面设计模式

O 引言
方法返回和改变模型数据 , 例如: 查询按钮按下(R SE 所 P S D) E
see , P sd e t 相对 于诸如 c和 c +这样的 传统语 言 , v 语 言已主宰 对应的方法为 i r s O 设置按钮按下所对应的方法为 s — + Ja a r s 。这 些方 法 实 际上 都是 对 P S E 等常 量和 ee E R SD 了中间层开发, 这主要归因其面向对象设计 、 平台无关性 , 以及 P s d 0
)e e0 l s
) I I ……其他 诸如静 态方法 c ae l ̄& ̄ r tU O e )
编程 者可 以从模 型 中得到组件 的状态 ( P s d ,利用 i rs ) se e
r p is cmp nn 对象的方 法( e o t tc0) G a hc 或 Jo o e t gt nMc is 获得绘制 F r 的元素(m)绘制组件 的不 同状态 。 f ,
维普资讯
计算机 时代 20 年 第 4 06 期
・2 2・
基于 J v a U 代理的图形用户界面设计模式 a I
袁 嵩
( 武汉科技 大学计算机科学与技术 学院,湖北 武汉 40 8) 30 1
摘 要:J aU 代理是深入图形用户界面的编程核心, a I v 是实现组件可插入外观感受效果的有效途径。 文中首先介绍了分
te k a Ma 充分支持 A I P。然而, 它在提供特定平台的用户所预期的外观 s t s变量的位操作。
和感觉以及性能水平方面还有待加强。MV ( dlVe 2设计 U 代理的视 图 C Moe i w I C nol)把组件 (o p nn J分 成三个部 分 : ot lrl r el 1 C m oet ̄ )t J 模型 ( d1 Moe ) 视图是模型中的数据通过 u 代理的 p n ) I i ( a t方法实现组件
JavaGUI编程创建漂亮的用户界面

JavaGUI编程创建漂亮的用户界面JavaGUI编程是一种强大的工具,它可以帮助开发者创建漂亮、直观的用户界面。
在本文中,我将为您介绍如何使用JavaGUI编程来设计和实现一个令人印象深刻的用户界面。
一、选择合适的图形库在开始编写JavaGUI程序之前,我们需要选择一个合适的图形库。
Java提供了多种图形库选项,包括Swing、JavaFX等。
在这里,我将以Swing为例进行演示。
二、设计用户界面设计用户界面是实现漂亮用户界面的第一步。
在设计过程中,我们应该考虑到用户的需求和使用习惯,使界面具有良好的可用性和可访问性。
以下是一些设计原则可以帮助您创建漂亮的用户界面:1. 简洁明了:界面应该简洁明了,避免过多的干扰元素和复杂的图形。
2. 色彩搭配:选择适合的颜色搭配,使界面看起来舒适和谐。
同时要注意颜色的对比度,以确保文字和界面元素的可读性。
3. 布局:合理的布局可以使界面更加整洁美观。
可以使用不同的布局管理器(如FlowLayout、GridBagLayout等)来帮助您实现布局。
4. 图标和图片:适当使用图标和图片可以增加界面的吸引力。
选择高质量的图标和图片,确保其分辨率和大小适合当前界面的需求。
5. 文字字体:选择易读的字体和合适的字号。
正文通常使用宋体、微软雅黑等,标题可以选择一些特殊的字体以增加视觉效果。
三、编写代码一旦您完成了用户界面的设计,接下来就是编写代码来实现这个界面。
下面是一个简单的示例,展示如何使用Swing来创建一个基本的用户界面。
```javaimport javax.swing.*;import java.awt.*;public class GUIExample {public static void main(String[] args) {JFrame frame = new JFrame("漂亮的用户界面");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(400, 300);JPanel panel = new JPanel();panel.setLayout(new FlowLayout());JLabel label = new JLabel("欢迎使用漂亮的用户界面!");label.setFont(new Font("宋体", Font.BOLD, 18));JButton button = new JButton("点击我");button.setPreferredSize(new Dimension(100, 50));panel.add(label);panel.add(button);frame.getContentPane().add(panel);frame.setVisible(true);}}```上述代码演示了如何创建一个简单的用户界面,其中包括一个标签和一个按钮。
java图形用户界面设计教程

第4章图形用户界面设计本章要点● Java图形用户界面设计的基本知识●布局管理器的应用● Java常用图形用界面设计组件的应用● Java常用组件事件处理的应用4.1 认识AWT包和Swing包用户界面是计算机用户与软件之间的交互接口。
一个功能完善,使用方便的用户界面可以使软件的操作更加简单,使用户与程序之间的交互更加有效。
因此图形用户界面(graphics user interface,GUI)的设计和开发已经成为软件开发中的一项重要的工作。
Java语言提供的开发图形用户界面(GUI)的功能包括AWT(Abstract Window Toolkit)和Swing两部分。
这两部分功能由Java的两个包来完成-awt和swing。
虽然这两个包都是用于图形用户界面的开发,但是它们不是同时被开发出来了。
awt包是最早被开发出来的。
但是使用awt包开发出来的图形用户界面并不完美,在使用上非常的不灵活。
比如awt包所包含的组件,其外观是固定的,无法改变,这就使得开发出来的界面非常死板。
这种设计是站在操作系统的角度开发图形用户界面,主要考虑的是程序与操作系统的兼容性。
这样做的最大问题就是灵活性差,而且程序在运行时还会消耗很多系统资源。
由于awt包的不足表现,SUN公司于1998年针对它存在的问题,对其进行了扩展,开发出了Swing,即swing包。
但是,SUN公司并没有让swing包完成替代awt包,而是让这两个包共同存在,互取所需。
awt包虽然存在缺点,但是仍然有可用之处,比如在图形用户界面中用到的布局管理器、事件处理等依然采用的是awt包的内容。
Java有两个主要类库分别是Java包和Javax包。
在Java包中存放的是Java语言的核心包。
Javax包是Sun公司提供的一个扩展包,它是对原Java包的一些优化处理。
swing包由于是对awt包的扩展和优化,所以是存放在Javax包下的,而awt包是存放在Java包下的。
Java的形化界面开发选择合适的框架与工具

Java的形化界面开发选择合适的框架与工具Java的图形界面开发选择合适的框架与工具Java是一种跨平台的编程语言,广泛应用于软件开发领域。
在图形界面开发方面,Java提供了多个框架与工具,开发者可以根据自身需求选择合适的组件和工具来进行开发。
本文将介绍几个常用的Java图形界面开发框架与工具,并分析它们的优势和适用范围。
一、Swing框架Swing是Java平台提供的主要图形界面开发框架之一。
它基于Java的AWT(Abstract Window Toolkit)框架,提供了丰富的GUI组件和强大的事件处理机制。
Swing具有良好的跨平台性能和灵活的可定制性,适用于开发各种类型的桌面应用程序。
Swing框架提供了一系列面向对象的GUI组件,如按钮、标签、文本框、表格等,开发者可以通过组合这些组件来构建复杂的用户界面。
此外,Swing还支持图形渲染、国际化和可访问性等功能,使得应用程序更加美观、易用和易于维护。
二、JavaFX框架JavaFX是Java平台的另一个重要图形界面开发框架。
它是在Java SE 8及其之后版本中引入的,作为Swing的继任者。
JavaFX框架提供了现代化的UI组件和丰富的动画效果,支持CSS样式表和FXML布局文件,极大地简化了界面设计和开发流程。
JavaFX具有良好的性能和优秀的渲染效果,在图形处理、媒体播放和界面布局等方面有着卓越的表现。
它的线程模型也更加灵活,能够实现响应式的用户界面设计。
三、AWT框架AWT是Java最早引入的图形界面开发框架。
它是使用本地窗口系统提供的原生组件,因此在外观和行为上与操作系统保持一致。
AWT 提供了一系列基本的GUI组件,如按钮、标签、文本框等,可以通过AWT的布局管理器来进行界面排版。
尽管AWT能够提供与操作系统一致的外观,但它的定制性和可扩展性相对较差。
另外,AWT的组件在跨平台上的兼容性也有一定的问题。
因此,在现代的Java应用程序开发中,AWT的使用相对较少,主要用于一些特定场景或需要与底层系统交互的应用。
Java图形用户界面设计

13
(3) 事件监听器(Listener) 事件处理机制中的核心部分,主要的功能大致可以分为 两部分:第一,监听组件,观察组件有没有发生某类事 件;第二,如果监听的组件发生了某类事件,则调用对 应的动作处理方法立刻处理这个事件。 在Java事件处理机制中,监听器处于主体地位。与事件 分类对应,监听器也相应的分成若干种类型,例如,鼠 标事件对应鼠标监听器,键盘事件对应键盘监听器,窗 口事件对应窗口监听器等。
25
5.3.2 AWT组件库常用组件举例 【问题1】 在窗口f中,有一个文本框tf,三个按钮btn_1、 btn_2、btn_3。当使用鼠标点击btn_1时,文本框显示 btn_1按钮被点击,当使用鼠标点击btn_2按钮时,文本框 显示btn_2按钮被点击,当使用鼠标点击btn_3按钮或者窗 口f的关闭按钮时,窗口关闭,程序退出。
(4) Choice Choice表示下拉选择框组件,选择框中的每一个选项称 为一个Item,Item的类型一般为String字符串。 (5) Label Label表示标签组件,主要作用在于创建提示性的文本。
23
(6) MenuBar、Menu和MenuItem MenuBar表示菜单条组件,该组件由Menu菜单构成,而 Menu菜单又可由Menu菜单和MenuItem菜单项构成。 (7) TextField TextField表示文本框组件,与文本域组件不同的是, 文本框中只能有一行文本。 (8) TextArea TextArea表示文本域组件,可以容纳多行文本。
30
(3) JRadioButton和ButtonGroup 在Swing中与Checkbox对应的是JCheckBox,实际使用时, 如果需要创建单选框组的话,经常使用的是 JRadioButton而非JCheckBox。如果将多个JRadioButton 组件放在一个ButtonGroup中时,这些JRadioButton组件 将不再具有复选功能,而是只具有单选功能,也即变成 单选框。 (4) JComboBox JcomboBox对应于AWT中的Choice,表示下拉选择框组件, 选择框中的每一个选项称为一个Item,Item的类型一般 为String字符串,也可以是指定的泛型类型。
Java语言程序设计:第十章 Java图形用户界面

t}ryesflrs{eaetmD{teer.fypaau{cltkC(l)o; seOperation(EXIT_ON_CLOSE);
选中“ToGoelnUyke}DsiItrMt.caiegmtjefaebreamxtaeIcHtncnmDnLheeaistoea}ep((gidf)oE.ctae;veinkxoaurarAc单.ntcllsstcieo.dTnc击ephmpoardrtetmotLi(i“FneoeEleokte(nnFnS)xoieiSttl”ec(te;kla)}iC”exzA.cgceplkneaetT=dtipsoS“rFtsanicoSNecrnaeeeav)(exlem(){nc;ASeellp”(iz)t)ei保;o()n存;)源{ 文U件I和M工an程a文g件er.getS
边
有间距
CENTER
的 East
组 容se器tHgap(int hgap)
件
setVgap(int vgap)
组
将组件间的水平间距设置为指定的值
件
将组件间的垂直间距设置为指定的值
下边的组件
South
天津职业技术师范大学
BorderLayout
…… class testFrame extends JFrame {
天津职业技术师范大学
BorderLayout
North
左
边 West 的
组 容器
件
上边的组件 CENTER
下边的组件
South
右 边 的 East 组 件
天津职业技术师范大学
BorderLayout
North
方法
左 BorderLay边out( )
West 的
Java的GUI设计打造美观直观的用户界面
Java的GUI设计打造美观直观的用户界面Java是一种广泛使用的编程语言,拥有着强大的图形用户界面(GUI)设计能力。
通过使用Java提供的各种GUI库和工具,开发人员可以轻松地创建美观、直观的用户界面。
本文将介绍一些在Java中实现这样的GUI设计的方法和技巧。
一、选择合适的GUI库在Java中,有多个GUI库可供选择,比如Swing、JavaFX等。
选择合适的GUI库是设计美观直观界面的第一步。
Swing是一个成熟的GUI库,提供了丰富的组件和布局管理器,可以满足大部分GUI设计需求。
JavaFX是Java官方推荐的GUI库,它提供了更现代化的界面设计风格和更优秀的性能。
二、使用布局管理器布局管理器是GUI设计中重要的一环,它定义了组件在窗口中的位置和大小。
Java提供了多种布局管理器,如FlowLayout、BorderLayout、GridLayout等。
通过合理选择和组合这些布局管理器,可以实现各种复杂的界面布局。
三、使用合适的图标和图片图标和图片在GUI设计中起着很重要的作用,可以通过它们来提升用户界面的美观性和直观性。
Java提供了处理图标和图片的功能和类库,开发人员可以使用这些功能来加载、处理和显示各种图标和图片。
四、使用合适的颜色和字体颜色和字体也是GUI设计中非常重要的元素,可以用来强调界面的重要信息或者创建特定的视觉效果。
Java提供了各种颜色和字体的类库和功能,可以用来选择合适的颜色和字体样式。
五、增加交互性一个好的用户界面应该具有良好的交互性,能够方便用户进行操作。
Java提供了丰富的事件处理机制和监听器,可以实现交互性功能。
开发人员可以通过监听用户的操作,及时响应并更新界面,实现更好的用户体验。
六、进行界面美化除了以上的基本设计原则,开发人员还可以通过一些额外的技巧来进一步美化用户界面。
比如使用渐变色背景、添加阴影效果、使用动画效果等。
这些技巧可以使界面更加生动、有趣,并提升用户的整体体验。
实验五java图形用户界面设计
§5 Java 图形用户界面设计§5.1实验目的、内容及性质掌握 Java 的 GUI 设计技术,掌握 AWT 和 Swing 的应用技巧。
实验性质:验证、必做实验学时:2学时§5.2问题及思考1、最常见的AWT以及Swing控件用法。
2、几个常见布局总结3、区分容器控件和一般非容器控件4、Java事件几种关键组成部分以及事件处理流程§5.3实验指导1、Swing示例/*需要哪些组件,如何布局?*/import java.awt.*;import java.awt.event.*;import javax.swing.*;public class MyFrm extends JFrame{//从JFrame继承/*声明界面需要使用的控件*/JLabel lbl_name =new JLabel("用户名");JLabel lbl_pwd =new JLabel("密码");JTextField txt_name=new JTextField();JPasswordField txt_pwd=new JPasswordField();JButton btn_OK=new JButton("登陆");JButton btn_Cancel=new JButton("取消");/*在构造函数中将控件放置在JFrame上*/public MyFrm(){/*获取当前Frame的内容面板*/JPanel jp=(JPanel)this.getContentPane();/*设置内容面板的布局 Layout*/jp.setLayout(new GridLayout(3,2));jp.add(lbl_name);jp.add(txt_name);jp.add(lbl_pwd);jp.add(txt_pwd);jp.add(btn_OK);jp.add(btn_Cancel);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public static void main(String arg[]){/*纯Java样式显示窗体*/JFrame.setDefaultLookAndFeelDecorated(true);/*实例化当前窗体类*/MyFrm frm=new MyFrm();frm.setSize(200,200);frm.setVisible(true);}}2、常用布局1)、流布局:FlowLayout 从左到右,自上而下方式在容器中排列,控件的大小不会随容器大小变化.容器.setLayout(new FlowLayout(FlowLayout.LEFT));2)、网格布局:GridLayout 按照指定行数与列数,将容器分成大小相等的单元格每个单元格放置一个控件. 不能将控件放在指定单元格容器.setLayout(new GridLayout(3,4,10,15));3)、边界布局:BorderLayout 将容器分成东、西、南、北、中五个部分容器.setLayout(new BorderLayout());窗口的内容面板默认布局就是边界布局。
Java基础案例教程第8章 GUI(图形用户界面)
8.1 AWT概述
2.Panel Panel也是一个容器,但是它不能单独存在,只能存在其他容器(Window或其 子类)中,一个Panel对象代表了一个长方形的区域,在这个区域中可以容纳 其他组件。在程序中通常会使用Panel来实现一些特殊的布局。
案例代码
了解了AWT组件的相关类后,为了使读者对GUI有一个更直观的认识, 接下来通过一个案例来创建一个简单的图形界面,请查看教材文件8-1。
了对应的Java类,这些类都位于java.awt包中,接下来通过一个图例来描述这些
类的继承关系,如图所示。
从图的继承关系可以看出,在AWT中组件分为两大类,这两类的基类分别是 Component和MenuComponent。其中,MenuComponent是所有与菜单相关组 件的父类,Component则是除菜单外其他AWT组件的父类,它表示一个能以图 形化方式显示出来,并可与用户交互的对象。
8.2 布局管理器
GridBagLayout
GridBagLayout(网格包布局管理器)是最灵活、最复杂的布局管理器。与
GridLayout布局管理器类似,不同的是,它允许网格中的组件大小各不相同,
而且允许一个组件跨越一个或者多个网格。 使用GridBagLayout布局管理器的步骤如下:
(1)创建GridbagLayout布局管理器,并使容器采用该布局管理器
(2)创建GridBagContraints对象(布局约束条件),并设置该对象的相关属性
8.2 布局管理器
(3)调用GridBagLayout对象的setConstraints()方法建立GridBagConstraints对象和受控 组件之间的关联
第八章 GUI(图形用户界面)
JavaSwing图形用户界面的设计与实现方法
JavaSwing图形用户界面的设计与实现方法一、引言随着计算机技术的不断发展,图形用户界面(Graphical User Interface,GUI)在软件开发中扮演着越来越重要的角色。
作为用户与软件之间的沟通桥梁,GUI的设计与实现至关重要。
本文将介绍JavaSwing图形用户界面的设计与实现方法,帮助开发人员更好地利用JavaSwing创建出功能强大、用户友好的GUI界面。
二、Swing概述JavaSwing是Java提供的一套GUI组件库,它基于Java AWT (Abstract Window Toolkit)构建而成,相对于AWT,Swing提供了更加丰富的组件和更高的灵活性。
Swing拥有独立于平台的外观,通过Java代码实现GUI界面的构建和事件处理。
使用Swing可以快速实现各种界面风格,并且易于调整和扩展。
三、Swing组件的使用1. 容器类组件:容器类组件是其他组件的父容器,对应于应用程序的窗口或面板,常用的容器类组件有JFrame、JPanel、JDialog等。
通过创建容器类组件,可以将其他组件添加到容器中并管理和布局。
2. 基本组件:基本组件是构建GUI界面的基本元素,常用的基本组件有JButton、JLabel、JTextField等。
它们可以用于实现用户输入、数据展示、按钮点击等交互操作。
3. 高级组件:高级组件是Swing提供的一些特殊功能的组件,如JTable、JTree、JFileChooser等。
它们可以用于展示表格、树状结构、文件选择等复杂的用户交互功能。
四、事件处理为了响应用户的操作,GUI界面需要进行事件处理。
在JavaSwing中,事件处理分为两个阶段:事件生成和事件响应。
当用户与界面进行交互时,会生成相应的事件,如按钮点击、鼠标移动等。
开发人员需要实现事件的监听器,并在事件发生时触发相应的操作。
五、界面布局界面布局是指组件在容器中的排列方式。
在Swing中,界面布局主要通过布局管理器(Layout Manager)实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0 引言
相 对 于 诸 如 C 和 C++ 这 样 的 传 统 语 言 , Java 语 言 已 主 宰 了中间层开发, 这主要归因其面向对象设 计、平台无关性 , 以 及 充分支持 API。然而, 它在提供特定平台的用户所预期的外观 和 感 觉 以 及 性 能 水 平 方 面 还 有 待 加 强 。 MVC (Model View Controller)[1]把 组 件(Component)划 分 成 三 个 部 分 : 模 型( Model) 管理这个模块中所用到的 数据和值, 如某个数据的最 大 值 、最 小值或者界面上滑动条所在的位置等数据; 视图( View) 管 理模 块如何显示给用户; 控制器( Controller) 决定如何处理用 户 和 该 模块交互时产生的事件, 如用户点击一个按钮等。Sun 出于对视 图和控制器之间的依赖关系的考虑, 在 Swing 设 计 中 将 MVC 体 系 简 化 为 分 离 模 型 体 系[2(] Separable Model Architecture) , 将 其中的控制器和视图结合成 UI 代理, 如图 1 所示。
2 设计 UI 代理的视图
视图是模型中的数 据 通 过 UI 代 理 的 paint()方 法 实 现 组 件 的可视表示。在 Swing 中设计 UI 代理的视图是 通过继承相应 UI 代理并覆盖其 paint()方法来实现的。Swing 中组件 paint()方 法将 Graphics 对象和 JComponent 对象传给 UI 代理, 由 UI 代 理 的 paint()方 法 在 Grapics 对 象 上 进 行 绘 制 , 这 样 编 程 者 就 可 以在自己的 UI 代理中编写绘制组件的代码了。
4 在组件中设置 UI 代理
组 件 中 设 置 UI 代 理 改 变 组 件 的 外 观 和 感 受 有 两 种 方 式 : 方式 1: 用组件的 setUI()方法 J Button jbS ma llRa inTe xt=ne w J Button("S ma llRa in Button"); jbS ma llRa inTe xt.s e tUI(ne w S ma llRa inButtonUI());
以 DefaultButtonModel 为 例 : 在 DefaultButtonModel 类 中 包 含 静 态 整 型 常 量 PRESSED、ENABLED、ROLOOVER、SE- LECTED、ARMED 和整型变量 stateMask。
当要查询和改变组件的状态时, 可以用模型中给出的相应
} } // 在组件根容器中编写代码 try {
UIMa na ge r.s e tLookAndFe e l( "S ma llRa inLookAndFe e l" ); S wingUtilitie s .upda te Compone ntTre e UI(this ); } ca tch( Exce ption e ) {} J Button jbS ma llRa inTe xt=ne w J Button("S ma llRa in Button"); SetLookAndFeel()先以“< ButtonUI“”, SmallRain.SmallRain- ButtonUI”> 形 式 存 到 UI Manager 的 嵌 套 静 态 类( LAFState) 中, 然后由 updateComponentTreeUI()对每个组件设置 UI 代理。 采 用 此 方 式 , 首 先 要 编 写 自 己 的 Look- And- Feel 类 , 然 后 将 自 己 的 UI 代 理 替 换 成 为 UIManager 中 的 默 认 UI 代 理 。 这 样, 在实例化组件时就便于整体使用自己的 UI 代理。此方式相 对复杂, 一般用于改变多类多个组件或整个界面的外观和感受。
Mous e Lis te ne r { public void mous e P re s s e d(Mous e Eve nt e ) {
·23·
Computer Era No. 4 2006
Abs tra ctButton a b = (Abs tra ctButton) e .ge tS ource (); ButtonMode l mode l = a b.ge tMode l(); if (!mode l.is Ena ble d()) {
5 设置了 UI 代理的组件的事件响应过程
设计好 UI 代理后, 将其设置在组件中, 并为组件 添 加 针 对 事 件 处 理 编 程 的 监 听 器 。这 实 际 上 使 得 组 件 拥 有 了 两 个 同 样 的 监听器, 一个用于 UI 代理, 另一个用于组件的事件处理编 程[4]。 下 面 以 添 加 了 针 对 事 件 处 理 编 程 的 MouseListener 监 听 器 为 例, 说明按下某个按钮时组件的事件响应过程。
Model(模 型 )
View(视 图 )
Controller(控 制 器 ) UI delegate(UI 代理)
图 1 Separable Model Architecture( 分离模型体系)
Swing 组 件 为 可 插 入 外 观 和 感 受 ( Pluggable Look- And - Feel) 提供的工作方式是让一个组件的可视外观和界面对于用 户 就 是 一 个 称 为 UI( User Interface) 代 理 的 独 立 对 象 , 这 就 是 MVC 模式中的视图 + 控制器 部 分[3]。UI 代 理 对 可 插 入 外 观 感 受效果提供支持, 这样就可以通过编写自己的 UI 代理来 设 定 组件的外观和工作方式, 而且可以在运行时动态改变。
3 设计 UI 代理的控制器
首先根据需要选择相应的监听器, 编写成控制器类, 然后 在 UI 代理中为组件添加控制器类中的监听器。
以实现 MouseListener 作为控制器为例: // 控制器类 public cla s s S ma llRa inButtonLis te ne r imple me nts
} //……其他诸如静态方法 cre a te UI()的覆盖 } 编 程 者 可 以 从 模 型 中 得 到 组 件 的 状 态 ( isPressed) , 利 用 Graphics 或 Jcomponent 对象的方法( getFontMetrics()) 获得绘制 的元素( fm) , 绘制组件的不同状态。
setUI () 方 法 先 调 用 UI 代 理 ( SmallRainButtonUI) 的 installUI(), 再调用 repaint()。
此方式相对简单, 一般用于改变单类单个或几类单个组件 的外观和感受。
方式 2: 利用 UIManager // 编写 LookAndFe e l 类 public cla s s S ma llRa inLookAndFe e l e xte nds
计算机时代 2006 年 第 4 期
·22·Βιβλιοθήκη 基于 J ava UI 代理的图形用户界面设计模式
袁嵩
(武汉科技大学计算机科学与技术学院, 湖北 武汉 430081)
摘 要: Java UI 代理是深入图形用户界面的编程核心, 是实现组件可插入外观感受效果的有效途径。文中首先介绍了分 离模型体系, 并在此基础上以典型代码介绍了 UI 代理的设计过程。详细论述了 UI 代理的视图、控制器的设计和在组件中 设置 UI 代理的方法以及设置了 UI 代理的组件的事件响应过程。 关键词: Java UI 代理; 图形用户界面; 分离模型体系; 可插入外观感受效果
Ba s icLookAndFe e l imple me nts S e ria liza ble { //……实现 LookAndFe e l 的其他抽象方法
prote cte d void initCla s s De fa ults (UIDe fa ults de fa ults ) { s upe r.initCla s s De fa ults (de fa ults ); S tring pa cka ge Na me = "S ma llRa in."; Obje ct[] uiDe fa ults = { "ButtonUI", pa cka ge Na me + "S ma llRa inButtonUI" //……其他 UI 代理 }; de fa ults .putDe fa ults (uiDe fa ults );
方 法 返 回 和 改 变 模 型 数 据 , 例 如 : 查 询 按 钮 按 下( PRESSED) 所 对 应 的 方 法 为 isPressed(), 设 置 按 钮 按 下 所 对 应 的 方 法 为 set- Pressed ()。 这 些 方 法 实 际 上 都 是 对 PRESSED 等 常 量 和 stateMask 变量的位操作。
以继承 BasicButtonUI 为例: //UI 代理类 public cla s s S ma llRa inButtonUI e xte nds Ba s icButtonUI {
public void pa int( Gra phics g, J Compone nt c ) { Abs tra ctButton a b = (Abs tra ctButton)c; FontMe trics fm = g.ge tFontMe trics (); De fa ultButtonMode l bm = a b.ge tMode l(); boole a n is P re s s e d=bm.is P re s s e d(); if(is P re s s e d) { //…… 绘制按钮按下代码 } e ls e {}
re turn; } mode l.s e tP re s s e d(true ); if(!a b.ha s Focus () && a b.is Re que s tFocus Ena ble d()) {