chp9.ppt

Similar documents
Swing-02.pdf

java2d-4.PDF

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes

第1章

<4D F736F F F696E74202D C DB5DA3132D5C25FCDBCD0CED3C3BBA7BDE7C3E6BBF9B4A12E BBCE6C8DDC4A3CABD5D>

PowerPoint 演示文稿

<4D F736F F F696E74202D20B5DA37D5C2204A617661B5C4CDBCD0CED3EBD3C3BBA7BDE7C3E62E BBCE6C8DDC4A3CABD5D>

授课内容 内容 图形界面与控制台应用的区别 (Console Application) 第 6 章图形用户界面图形用户界面 (Graphical User Interface,GUI), 使用图形方式借助菜单 按钮等标准界面元素和键盘 鼠标操作, 实现人机交互 内容和要求 : 掌握 Java Swi

Microsoft PowerPoint - ch02

(CIP) Web /,. :, ISBN X.W T P393.4 CIP (2004) Web ( ) ( / ) : * 787

利用Java技术编写桌面软件基础

Microsoft Word - 投影片ch23

Microsoft PowerPoint - ch03


大漠 伪前端, 就职于淘宝

Microsoft Word - 第13章.doc

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

Microsoft Word - Broker.doc

PowerPoint 簡報

图形学 Project 2 要求 任意两个多边形, 求出其相交的区域 使用说明 例 1 第一步, 与 Project 1 画多边形的方法相同, 画一个多边形 ; 第二步, 单击 INTERSECT WITH, 随后画出第二个多边形 ; 第三步, 单击 FILL 进行填充

Chapter 9: Objects and Classes

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

幻灯片 1

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464>

chp11.ppt

ebook111-4

基于CDIO一体化理念的课程教学大纲设计

LEFT, RIGHT // 左 // 右 (2) 当图片移动后, 按钮的坐标发生改变, 此操作通过 setloca tion() 方法实现 setlocation() 方法是从 Component 类继承的, 其定义如下 : public void setlocation(int x, int y

p.2 1 <HTML> 2 3 <HEAD> 4 <TITLE> </TITLE> 5 </HEAD> 6 7 <BODY> 8 <H3><B> </B></H3> 9 <H4><I> </I></H4> 10 </BODY> </HTML> 1. HTML 1. 2.

无类继承.key

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

Microsoft Word - 正文.doc

ZW1.PDF

1.3 最终效果图 : 2 内部布局代码 2.1 按键按钮代码 // 初始化计算器上键的按钮, 将键放在一个画板内 JPanel keypanel = new JPanel(); // 用网格布局器,4 行,5 列的网格, 网格之间的水平方向间隔为 3 个象素, 垂直方向间隔为 3 个象素 keyp

Microsoft PowerPoint ppt

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

Chapter 9: Objects and Classes

Microsoft Word - 正文.doc

(京)新登字063号

Topic

Java事件处理模型

mvc

coverage2.ppt

Microsoft Word - 正文.doc

javaexample-02.pdf

软件工程文档编制

[Short Essay:] 1. (5 points) Use state-of-memory diagram to describe the differences between x and y declared as follows: double[] x = new double[4];

图形学 Project 1 要求 多边形区域填充 ( 算法不限 ) 使用说明 例 1 第一步, 鼠标随意在界面中的画布上点击两次, 则两点间连一条直线 ; 第二步, 画第三个顶点时, 自动连结成为三角形 ; 第三步, 按顺序依次点击, 则按点击顺序形成多边形, 每次多边形变化时, 第一个点和最后

untitled

基于ECO的UML模型驱动的数据库应用开发1.doc

Microsoft Word - Java全文.doc

可 Web 编程的NativeUI 设计与实现

chp8.ppt

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

Microsoft Word - 投影片ch20

Guava学习之Resources

Microsoft Word - 新1-12.doc

Business Objects 5.1 Windows BusinessObjects 1

图形用户界面 (GUI) 设计

Microsoft PowerPoint - course8.ppt

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

付宝容器 jsapi 档 册 PDF 版本 本版本为实验版本, 为线下独 查看使, 受制于 成 PDF 程序的限制, 样式问题还没有很好的解决, 例如分 切图 代码 亮 推荐使 在线版本, 便实时查看 jsapi 运 效果 如需搜索, 使 阅读 PDF 软件 带功能即可 更多细节样式调整和 录索引探

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Text 文字输入功能 , 使用者可自行定义文字 高度, 旋转角度 , 行距 , 字间距离 和 倾斜角度。

epub 94-3

chp6.ppt

手册 doc

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

Microsoft Word - 01.DOC

WinMDI 28

全国计算机技术与软件专业技术资格(水平)考试

untitled

Java

JavaIO.PDF

EJB-Programming-4-cn.doc

5-1 nav css 5-2

3.1 num = 3 ch = 'C' 2

Photoshop CS6 艺术设计案例教程 ( 第二版 ) 1.1 Photoshop 的应用领域 Photoshop,,, Photoshop Photoshop 的用途 Photoshop CIS ( ) ( ) 案例展现 ~ 1

Adobe® Flash® 的 Adobe® ActionScript® 3.0 程式設計

Microsoft Word - 3D手册2.doc

MATLAB介紹

Learning Java

C 1

untitled


Microsoft Word - Java程序设计全文_终_.doc

D C 93 2

Microsoft Word - Data IO CS Calculate Method AppNote.doc

基于UML建模的管理管理信息系统项目案例导航——VB篇

A-1 HTML A-1-1 HTML 1 HTML JSP HTML HTML HTML JSP A HTML HTML HTML HTML HTML HTML HTML HTML.htm.html HTML Windows NotePad HTML IE [ / ] NotePad A-2

RUN_PC連載_8_.doc

第1章

( 二 ) 具 体 目 标 课 程 教 学 目 标 具 体 体 现 为 专 业 技 能 专 业 素 质 和 专 业 知 识 三 方 面 的 目 标 (1) 专 业 技 能 目 标 1 能 运 用 面 向 对 象 程 序 设 计 的 思 想 分 析 和 设 计 类 ; 会 定 义 接 口, 并 能 有

Transcription:

Java 软件设计基础 高级 GUI 设计与多媒体技术

1. 布局设计 布局概述 java.awt FlowLayout BorderLayout CardLayout GridLayout GridBagLayout java.swing BoxLayout ScrollPanelLayout ViewportLayout OverLayout

FlowLayout 布局策略 将容器的组件按照加入的先后顺序从左至右依次排列, 一行排满后就转到下一行继续从左至右顺序排列, 每一行中的组件都居中排列, 组件间默认的水平和垂直间隙是五个像素 FlowLayout 是 JPanel 与 Applet 默认的布局管理策略 构造方法 FlowLayout() 创建一个 FlowLayout 居中布局, 组件间水平和垂直间隙均为 5 个像素 FlowLayout(int align) 创建一个 FlowLayout 布局, 对齐方式为 align,, 组件间水平和垂直间隙均为 5 个像素 FlowLayout(int align, int h, int v) 创建一个 FlowLayout 布局, 对齐方式为 align,, 组件间水平和垂直间隙分别为 h 和 v 个像素

示例 import java.awt.*; import javax.swing.*; public class Flows extends JFrame{ private JButton but1,but2,but3; public Flows(){ super("flowlayout 演示程序 "); FlowLayout layout = new FlowLayout(FlowLayout.CENTER); Container c = getcontentpane(); c.setlayout(layout); layout.sethgap(8); but1= new JButton("left"); but2= new JButton("center"); but3= new JButton("right"); c.add(but1); c.add(but2); c.add(but3); setsize(300,100); show(); } public static void main(string args[]){ Flows app = new Flows(); } }

BorderLayout 布局策略 将窗口分为 North/East/South/West/Center 五个区域, 中间的区域最大 当哪个区域不放置组件时, 其空间就分配给其他区使用 每加入一个组件都应该指明添加到哪个区域 BorderLayout 也称为边界布局管理器, 是 Window Frame 和 Dialog 默认的布局管理策略 构造方法 BorderLayout() 创建一个 BorderLayout BorderLayout(int h, int v) 创建一个 BorderLayout 布局, 组件间水平和垂直间隙分别为 h 和 v 个像素 一般方法 add(component comp, Object con) 加入组件 comp,con con 指明组件被加入的位置

实例

CardLayout 布局策略 可实现多个组件在同一容器区域内重叠放置 交替显示 通过用户的操作可将组件一个接一个显示出来, 即容纳多个组件的同时只能从这些组件中选出一个来显示, 这个被显示的组件将占据所有的容器空间 CardLayout 也称为卡式布局管理器 构造方法 CardLayout() 创建一个 CardLayout CardLayout(int h, int v) 创建 CardLayout 布局, 组件间水平和垂直间隙分别为 h 和 v 个像素 一般方法 first(container c) 显示 Container 中的第一个对象 last(container c 显示 Container 中的最后一个对象 previous(container c) 显示 Container 中的上一个对象 next(container c) 显示 Container 中的下一个对象 add(string t, Component c) 将组件 c 加到容器中并指定与 c 对应的选项卡文本提示为 t

实例

GridLayout 布局策略 在一个二维网格中布置组件 将容器划分为若干行若干列的网格区域, 每个网格的大小相等, 组件就位于这些划分出来的小格中, 一个网格可以放置一个组件 组件可被依次的放在第一行第一列 第一行第二列 的顺序进行 通过在一个网格中放置容器, 可以实现嵌套 GridLayout 也称为网格布局管理器, 该布局比较灵活, 划分多少网格由程序自由控制, 组件定位也比较精确 构造方法 GridLayout() 创建一个 GridLayout 布局 GridLayout(int r, int c) 创建一个 r 行 c 列的 GridLayout 布局 GridLayout(int r, int c, int h, int v) 创建一个 r 行 c 列的 GridLayout 布局, 组件间水平和垂直间隙分别为 h 和 v 个像素

实例

GridBagLayout 布局策略 采用网格的形式来布置组件, 允许指定的组件跨多行或多列, 同时允许组件部分重叠 组件的位置和大小由 GridBagConstraints 类的对象实例决定 GridBagConstraints 类规范组件使用 GridBagLayout 布局管理器的限制条件 GridLayout 也称为网格包布局管理器, 是 Java 提供的最灵活 最复杂的布局管理器之一 构造方法

GridBagLayout 的方法 GridBagLayout() 创建一个 GridBagLayout 布局 setconstrains(component GridBagConstraints cons) add(component comp, Object cons) comp, GridBagConstraints 的属性 设置网格包约束条件,comp, 是被加入的组件, 并用 cons 指定为 GridBagConstraints 类的一个实例 添加组件, 并用 cons 指定 GridBagConstraints 类的一个实例 fill Anchor Insets Grid Gridy gridwidth girdheight weightx weighty 当组件比所在网格小时的填充方式 当组件小于显示区域网格时决定组件放置的位置填充组件和网格边缘间的部分, 负值导致组件延伸到网格单元的外边 指定组件的左上角所在的行和列 指定组件显示区域所占行数和列数 指定列之间和行之间用来填充额外空间的权值 NONE, HORIZONTAL, VERTICAL, BOTH CENTER( 默认值 ), NORTH, NORTHEAST, EAST, SOUTH, SOUTHEAST, SOUTHWEST, WEST, NORTHWEST 默认为 insets(0,0,0,0),, 四个参数分别代表上下左右 第一行或第一列均用 0 表示 整数, 值为 Remainder 表示组件为当前行或列的最后一个组件,Relative, 则表示紧挨着当前行或列组件后 整数

实例 import java.awt.*; import java.awt.event.*; public class GridBags extends JFrame{ public static void main(string args[]){ Frame f = new Frame("GridBagLayout"); GridBagLayout g1 = new GridBagLayout(); GridBagConstraints con = new GridBagConstraints(); con.fill = GridBagConstraints.HORIZONTAL; f.setlayout(g1); Button but1 = new Button("Data input"); Button but2 = new Button("Data modified"); Button but3 = new Button("Data query"); Button but4 = new Button("Data print"); Button but5 = new Button("Data delete"); g1.setconstraints(but1,con); con.weightx = 1.2;f.add(but1); g1.setconstraints(but2,con);f.add(but2); g1.setconstraints(but3,con);f.add(but3); con.gridwidth = GridBagConstraints.REMAINDER; g1.setconstraints(but4,con);f.add(but4); g1.setconstraints(but5,con);f.add(but5); f.setsize(250,100); f.setbackground(color.cyan); f.setvisible(true); } }

BoxLayout 布局策略 有垂直和水平两种排列方式, 组件加入的先后顺序为从左 ( 上 ) 到右 ( 下 ), 容器两端是剩余的空间 在策划程序布局时, 也可以通过盒式布局的嵌套达到目的 java.swing 中提供的 Box 类是 Container 类的子类, 据此创建的容器称为盒式容器, 默认布局即为 BoxLayout 且无法更改 又称为盒式布局管理器, 在 java.swing.border 包中 构造方法 BoxLayout(Container con, int axis) 创建 BoxLayout 布局, 参数 axis 决定该布局是行型还是列型布局, 其有效值是 BoxLayout.X-AXIS 和 BoxLayout.Y-AXIS

一般方法 getlayoutalignmentx(container con) getlayoutalignmenty(container con) setlayoutalignmentx(container con) setlayoutalignmenty(container con) LayoutContainer(Container con) 获得容器沿 X 轴的对齐方式 : 行排列 获得容器沿 Y 轴的对齐方式 : 行排列设置容器沿 X 轴的对齐方式 : 行排列 设置容器沿 Y 轴的对齐方式 : 行排列设置 con 窗口的布局方式为 BoxLayout 布局 Box.createHorizontalBox() 构建一个行型盒式布局的 Box 容器组件 Box.createverticalBox() 构建一个列型盒式布局的 Box 容器组件 Box.createHorizontalStruct(int width) Box.createverticalStruct(int height) 构建一个不可见的宽度为 width 的水平 Struct 类型支撑对象来控制组件之间的距离构建一个不可见的宽度为 width 的水平 Struct 类型支撑对象来控制组件之间的距离 Box.createHorizontalGlue() 构建一个水平方向的 Glue 组件 Box.createverticalGlue() 构建一个垂直方向的 Glue 组件

import 实例 java.awt.*; import java.awt.event.*; import javax.swing.*; public class Boxes extends JFrame{ public Boxes(){ super("boxlayout"); final int SIZE = 3; Container c = getcontentpane(); c.setlayout(new BorderLayout(30,30)); Box boxes[ ] = new Box[4]; boxes[0] = Box.createHorizontalBox();boxes[1] = Box.createVerticalBox(); boxes[2] = Box.createHorizontalBox();boxes[3] = Box.createVerticalBox(); for(int i=0;i<size;i++) boxes[0].add(new JButton("class"+i)); for(int i=0;i<size;i++) boxes[1].add(new JButton("grade"+i)); for(int i=0;i<size;i++) boxes[2].add(new JButton("classroom"+i)); for(int i=0;i<size;i++) boxes[3].add(new JButton("restroom"+i)); c.add(boxes[0],borderlayout.north);c.add(boxes[1],borderlayout.west); c.add(boxes[2],borderlayout.south);c.add(boxes[3],borderlayout.east); setsize(350,300); show(); } public static void main(string args[]){ Boxes bb = new Boxes(); bb.addwindowlistener(new WindowAdapter(){ public void windowclosing(windowevent e){system.exit(0);} }); } }

2. 菜单组件 菜单栏 用来管理菜单, 只能被添加到 Frame 对象中 作为整个菜单的根基不参与交互操作 Java 中, 应用程序的菜单都包含在菜单栏对象中 在 awt 中由 MenuBar 负责创建, 在 swing 中由 JMenuBar 负责创建 构造方法与一般方法 菜单 JMenuBar 类 MenuBar 类 JMenuBar() 创建一个空菜单栏 setjmenubar(jmenubar menu) 将菜单栏添加到窗口的菜单栏区域 MenuBar() 创建一个空菜单栏 add(menu m) 将一个 Menu 对象 m 添加到引用的 MenuBar 对象中 用来存放与整合菜单项的组件 菜单可以是单层的菜单, 也可以为多层结构 awt 中由 Menu 负责创建,swing 中由 JMenu 负责创建

构造方法与一般方法 JMenu 类 Menu 类 JMenu() 创建一个无标签的菜单对象 JMenu(String menuname) 创建一个菜单名为 menuname 的菜单对象 add(string s) 向菜单增加指定的选项 getitem(int n) 获取指定索引处的菜单选项 getitemcount() 获取菜单选项数目 add(jmenuitem item) 将 item 添加到引用的菜单对象上 addseparator() 在目前位置插入一条分隔线 Menu() Menu(String menuname) add(menuitem item) 创建一个无标签的菜单对象创建一个菜单名为 menuname 的菜单对象 将 item 添加到引用的菜单对象上 addseparator() 在目前位置插入一条分隔线

菜单项 是菜单系统的基本组件, 是用户最终选择的项目 在 awt 中由 MenuItem 负责创建, 在 swing 中由 JMenuItem 负责创建 菜单项本身也可以是菜单, 称为子菜单 菜单项也可以使用带复选框或单选按钮的菜单项, 分别是 : awt: CheckBoxMenuItem RadioButtonMenuItem swing:jcheckboxmenuitem JRadioButtonMenuItem 例 : 创建单选按钮菜单项和创建复选框菜单项

构造方法与一般方法 : JMenuItem 类 MenuItem 类 JMenuItem(String s) 创建名为 s 的菜单项 JMenuItem(String s,icon i) 创建名为 s 图标为 i 的菜单项 JRadioButtonMenuItem(String s) 创建标题为 s 带单选按钮的菜单项 JCheckButtonMenuItem(String s) 创建标题为 s 带复选框的菜单项 setenabled(boolean b) 设置当前菜单项是否可被选择 getlabel() 获取菜单项名字 getkeystroke(char keychar) 返回一个字符型的 KeyStroke 对象 setaccelerator(keystroke k) 为菜单项设置快捷键 MenuItem(String s) 创建名为 s 的菜单项 getactioncommand() 返回菜单项对象所产生的动作事件关联的命令名称 disable() 设置当前菜单项不可用 JCheckButtonMenuItem(String s) 创建标题为 s 带复选框的菜单项 getstate() 获取复选框的状态 setstate(boolean b) 设置复选框的状态

弹出式菜单 不固定在菜单栏中, 而是可以四处浮动显示, 依附于某个容器或组件, 平时并不显示, 在单击鼠标右键时显示 在 awt 中由 PopupMenu 负责创建, 在 swing 中由 JPopupMenu 负责创建 菜单创建步骤 创建菜单栏对象, 并将其加入到所建的框架中 : 创建菜单及其子菜单

通过 Action 对象新建菜单项并添加事件监听器 将菜单项加入到子菜单或菜单中, 将子菜单加入到菜单中, 将菜单加入到菜单栏中 实例

续 JMenuItem filenew = new JMenuItem( New ); JMenuItem fileopen = new JMenuItem( Open ); JMenuItem filesave = new JMenuItem( Save ); JMenuItem fileexit = new JMenuItem( Exit ); filemenu.add(filenew); filemenu.add(fileopen); filemenu.add(filesave); filemenu.add(fileexit); bar.add(filemenu); fileexit.addlistener(new ActionListener(){ public void actionperformed(actionevent e){ System.exit(0); } }); JMenu editmenu = new JMenu( Edit ); JMenuItem copymenu = new JMenuItem( Copy ); JMenuItem pastemenu = new JMenuItem( Paste ); JMenuItem cutmenu = new JMenuItem( Cut ); JMenuItem selectmenu = new JMenuItem( Select ); editmenu.add(copymenu); editmenu.add(pastemenu); editmenu.add(cutmenu); editmenu.addseparator(); editmenu.add(selectmenu); bar.add(editmenu);

续 } JMenu formatmenu = new JMenu( Format ); JMenuItem colormenu = new JMenuItem( Color ); JMenuItem fontmenu = new JMenuItem( Font ); formatmenu.add(colormenu); formatmenu.add(fontmenu); bar.add(formatmenu); setsize(300,200); show(); } public static void main(string args[]){ MenuExam mm = new MenuExam(); mm.addwindowlistener(new WindowAdapter(){ public void windowclosing(windowevent e){ System.exit(0); } });

3.swing 组件 概述 swing 组件与 awt 组件的比较 swing 组件在 awt 基础上构建起来的, 基于 awt 的事件处理机制 ; 所以完全舍弃 awt 包不太可能 ; swing 组件几乎都是轻量级组件 swing 采取了 模型 - 视图 - 控制器 (MVC: Model-View-Controller) 的设计范式, 其中模型用来保存内容, 视图用来显示内容, 控制器用来控制用户输入 新版的 swing 包可能与旧版不完全兼容 ; awt 包的运行速度比 swing 快, 但 swing 的功能更趋于完善 采用 swing 进行 GUI 设计的一般流程 引入 swing 包, 基于使用感觉选择合适的外观并设置顶层容器 ; 向容器内添加并设置组件 ; 在组件周围添加辅助属性并进行事件处理

swing 中的包 javax.swing javax.swing.border javax.swing.colorchooser javax.swing.event javax.swing.plaf javax.swing.plaf.basic javax.swing.plaf.metal javax.swing.table javax.swing.text javax.swing.text.html javax.swing.text.html.parser javax.swing.text.rtf javax.swing.tree javax.swing.undo com.sun.javax.swing.plaf.motif com.sun.javax.swing.plaf.windows com.sun.javax.swing.plaf.gtk swing 组件和实用工具 swing 轻组件的边框 JColorChoose 的支持类 / 接口事件和监听器类抽象类, 定义 UI 代理的行为实现所有标准界面样式公共功能的基类用户界面代理类, 实现 Metal 界面样式 JTable 组件的支持类支持文档的显示和编辑支持显示和编辑 html 文件 html 文件的分析器类支持显示和编辑 RTF 文件 JTree 组件的支持类支持取消操作用户界面代理类, 它们实现 Motif 界面样式用户界面代理类, 它们实现 Windows 界面样式用户界面代理类, 它们实现 GTK 界面样式

swing 包中的类层次结构

swing 组件的分类 按照功能划分 基本控件 : 实现人机交互的基本组件 包括 JButton JcomboBox JList JMenu JSlider JTextField JTexAtrea JPasswordField; 顶层容器 : 包括 JFrame JApplet JDialog JWindow; 中间容器 : 涵盖 JPanel JScrollPane JSplitPane JLayeredPane JToolBar; 特殊容器 : 在 GUI 上起特殊作用的中间层, 如 JInternalFrame( 内部窗件 ) JRootPane 按 swing 组件对信息的可编辑与否划分 不可编辑信息的显示 : 如 JLabel JProgressBar ToolTip; 可编辑信息的显示 : 如 JTextField JTextArea JPasswordField JColorChooser JFileChooser JTable

组件常用方法 组件的颜色 组件背景色的设置方法 : public void setbackground(color c) 组件前景色的设置方法 : public void setforeground(color c) 组件背景色的获取方法 : public Color getbackground() 组件前景色的获取方法 : public Color getforeground() 上述方法中都涉及 Color 类,Color 类是 java.awt 包中的类, 该类窗件的对象称为颜色对象,Color 类的构造方法如下 : public Color(int red, int green, int blue) 其中 red green blue 的取值在 0~255 之间

组件的字体 组件字体的设置方法 : public void setfont(font f) 组件字体的获取方法 : public void getfont() 上述方法用到了 java.awt 包中的 Font 类, 该类的构造方法如下 : public Font(String name, int style, int size) name: 字体名字, 如果系统不支持字体的名字, 将取默认名字创建字体对象 ; style: 字体样式, 有效取值为 Font.BOLD Font.PLAIN Font.ITALIC Font.ROMAN_BASELINE Font.CENTER_BASELINE Font.HANGING_BASELINE Font.TRUETYPE_FONE; size: 字体大小, 单位是磅 获取系统中可以提供的字体名字, 可以通过 GraphicsEnvironment 对象调用 getavailablefonefamilynames() 方法将可用字体名称存放到字符串数组中

组件的边框 : 组件边框的设置方法 : public void setborder(border b) 组件边框的获取方法 : 默认情况下组件的边框是黑边矩形 组件透明 public Border getborder() 设置组件的透明性 : public void setopaque(boolean isopa) isopa 取 false 时组件为透明, 取 true 时被设置为不透明 ; 获取组件的透明性 : public boolean getopaque() 组件透明时返回值为 false, 否则返回值为 true;

组件的大小与位置 public void setsize(int width, int height) 设置组件的大小,width 指定组件的宽度,height 指定组件的高度 public void setlocation(int x, int y) 设置组件在容器中的位置 public Dimension getsize() 返回一个 Dimension 对象下组件的宽度和高度值 public Point getlocation() 返回一个含有成员变量 x 和 y 的 Point 对象的引用,x 和 y 就是组件在容器中的坐标 public void setbounds(int x, int y, int width, int height) 设置组件在容器中的位置和组件的大小 public Rectangle getbounds() 返回一个含有成员变量 x y width 和 height 的 Rectangle 对象的引用

组件的激活与可见性 public void setenable(boolean b) 设置组件是否可被激活, 当 b 为 true 时组件可被激活, 否则组件不可激活 public void setvisible(boolean b) 设置组件在该容器中的可见性, 当 b 为 true 时组件可见, 否则组件不可见 实例

JFrame 窗体 JFrame 是 GUI 中的一个框架容器 javax.swing 包中的 JFrame 是 java.awt 包中 Frame 类的子类 构造方法 : JFrame() 创建一个不含标题的新 JFrame 类窗体对象 JFrame(String s) 创建一个标题为 s 的新 JFrame 类窗体对象 一般方法 : setsize(int width, int height) 设置 JFrame 对象的宽和高 setbackground(color c) 设置 JFrame 对象的背景色 setvisible(boolean b) 设置 JFrame 对象的可见性 setresizable(boolean b) 设置 JFrame 对象是否可以改变大小 JMenuBar getmenubar() 获得窗口中的菜单栏组件 remove(component c) 将窗口中指定的组件移除 setdefaultcloseoperation(int op) setbounds(int x, int y, int width, int height) 单击窗体关闭按钮时的默认操作 设置窗口的坐标和大小

使用 JFrame 的流程 当应用程序需要一个窗口时, 可使用 JFrame 或其子类创建一个对象, 窗口默认的被系统添加到显示器屏幕上 JFrame 窗体通过调用方法 getcontentpane() 得到它的内容面板 将组件添加到 JFrame 窗体的内容面板中去 标签与文本组件 标签组件 JLabel 大体与 Label 一致, 但它允许添加图像, 而且当鼠标的光标停留在标签位置时会显示一段文字提示 构造方法 : JLabel() 创建没有名字的标签对象 JLabel(String s) 创建名字为 s 的标签对象 JLabel(Icon icon) JLabel(String s, int align) 创建具有图标 icon 的标签对象, 图标左对齐 创建名字为 s 对齐方式为 align 的标签对象

一般方法 文本组件 gettext() 获取标签名字 seticon(icon icon) 设置标签图标 settext(string s) 设置标签对象的文字 setalignment(int align) 设置标签对象的对齐方式 JTextField 类 : 定义一个可以输入单行文字的矩形区域文本框 ; JTextField() 创建一个空文本框对象 JTextField(String s) 创建一个内容为 s 的文本框对象 JTextField(String s, int n) 创建一个内容为 s 列为 n 的文本框对象 int getcolumns() 获得文本框对象的列数 setcolumns(int n) 设置文本框对象的列数 setfont(font f) 设置文本框的字体 addactionlistener(actionlistener e) 将监听者注册给文本框对象

JTextArea 类 : 定义一个可以输入单行文字的矩形区域文本框 ; getcolumns() 获得对象的列数 seteditable(boolean b) 指定文本域的可编辑性 setalignment(int align) seticon(icon icon) settext(string s) 设置文字 JPasswordField 类 : 定义一个密码框对象 事件机制 事件源 设置文本域的对齐方式设置图标 setechochar(char c) 设置回显字符 char[ ] getpassword() 返回密码框中的密码 能够产生时间的对象都可以称为事件源, 如文本框 按钮 下拉式列表等等

监听器 通过对事件源进行监听, 一以便对发生的事件做处理 事件源通过调用相应的方法注册相应的监听器 对于注册了监听器的对象, 系统将自动调用相应的事件类创建该类事件的实例, 并通知监听器 处理事件的接口 当事件源发生事件时, 接口立刻通知监听器自动调用实现的某个接口方法, 接口方法规定了怎样处理事件的操作 实例 :

按钮组件 AbstractButton 类派生出两个组件 : JButton 组件 :swing 按钮 ; JToggleButton 组件 : 单选按钮 (JRadioButton) 和复选框 (JCheckButton) 的父类 JButton 类的构造方法 : JButton() 构造无标题按钮对象 JButton(String s) 构造标题为 s 的按钮对象 JButton(Icon icon) JButton(String s, Icon icon) JButton 类的一般方法 : 构造图标为 icon 的按钮对象 构造标题为 s 图标为 icon 的按钮对象 addactionlistener(actionlistener e) 给按钮对象增加动作监听器, 即注册 removeactionlistener(actionlistener e) 移去按钮上的监听器 settext(string s) 设置文字

gettext() 获取按钮标签文字 seticon(icon icon) 实例 设置按钮图标 geticon() 获取按钮图标 setenabled(boolean b) 设置当前按钮的可用性 inselected() 获取按钮状态 sethorizontaltextposition(int textposition) setverticaltextposition(int textposition) 设置按钮名相对水平位置 (LEFT/CENTER/RIGHT) 设置按钮名相对垂直位置 (TOP/CENTER/BOTTOM)

复选框与单选按钮 JCheckButton 构造方法 JCheckBox() 创建一个无标签复选框对象 JCheckBox(String s) 创建一个标签为 s 的复选框对象 JCheckBox(String s, Icon icon) 一般方法 JRadioButton 创建一个标签为 s 图标为 icon 的复选框对象 JCheckBox(String s, boolean b) 创建一个标签为 s 状态为 b 的复选框对象 void additemlistener(itemlistener i) 注册 ItemListener 监听器 public boolean isselected() 返回复选框状态 public void setselected(boolean b) 设置复选框状态 Java 提供 ButtonGroup 类为单选按钮类提供多选一功能, 当创建了若干个单选按钮后, 需要将这些按钮添加到 ButtonGroup 的实例中去 JRadioButton 构造方法与一般方法与复选框类似, 略

复选框与单选按钮事件 实例 : 这两种组件引发的事件由 ItemEvent 类派生, 该类包含了一个 ITEM_STATE_CHANGE 事件 ItemEvent 类的主要方法 :»Object.getItem() 方法 : 告知用户是哪个选择项的状态发生变化 ;»int getstatechange() 方法 : 是用户知道选中了哪个选项

下拉列表组件 下拉列表 (JComboBox) 构造方法 JComboBox() 创建空下拉列表框 JComboBox(Vector vect) JComboBox(ComboBoxModel model) 一般方法 使用向量表创建一个下拉列表对象从已有的 model 获得选项创建下拉列表对象 JComboBox(Object[ [ ] items) 使用数组创建下拉列表对象 void addactionlistener(actionlistener e) 注册事件对象给 ActionListener void additemlistener(itemlistener e) 注册事件对象给 ItemListener void additem(object obj) Object getitemat(int index) 添加选项获取指定位置的选项 int getitemcount() 获得当前选项的数目 public Object getselecteditem() 获得被选项

void seteditable(boolean b) 设置是否可以编辑 int getselectedindex() 获取被选中项的索引 void removeallitems() 移除全部选项 void removeitemat(int index) 移除索引为 index 处的选项 void remove(component comp) 实例 移除指定的组件

列表 (JList) 构造方法 JList() 创建一个空列表对象 JList(Vector vect) 一般方法 实例 使用向量表创建一个列表对象 JList(Object[ [ ] items) 使用数组创建一个列表对象 int [ ] getselectedindices() 获得被选取的多个项 int getselectedindex(int i) 获得选取的单个项 void setvisiblerowcount(int num) 设置可见的列表选项 void addlistselectionlistener(listselectionlistener e) 注册监听器 int getvisiblerowcount() 获得可见的列表选项值

表格组件 JTable 是 Swing 新增的组件, 主要功能是将数据以二维表格的形式显示出来 JTable() 创建一个默认模式的表格对象 JTable(Object data[ ][ ], Object columnname[ [ ]) JTable(TableModel dm, TableColumnModel cm, TableSelectionModel sm) 创建一个表格对象, 用来显示二维数组 data 中的值, 其列名称为 columnname 构造表格对象, 使用 dm 作为数据模型 cm 作为列模型和 sm 作为选择模型对其进行初始化 一般方法 getcontentpane(). 属性 repaint(); 获取设置框架中 contentpane 面板对象下的属性值 表格更新显示 getrowcount(); 获取表格行数 getcolumncount(); 获取表格列数 getcolumnname(int col); 获取表格某列名字

getvalueat(int row, int col) setvalueat(object value, int row, int col) 注意 : 用户在表格单元中输入的数据都被认为是一个 Object 对象 ; 表格中的数据将以行和列的形式显示数组 data 每个单元中对象的字符串表示 实例 获取现有表格某行某列的数据 改变现有表格某行某列的数据

JTableWin(String s){ super(s); sumrows=new JButton("Good Sales"); sumcolumns=new JButton("Total Sales"); inputrowsnumber=new JTextField(4); sumrows.addactionlistener(this); sumcolumns.addactionlistener(this); inputrowsnumber.addactionlistener(this); psouth=new JPanel(); pnorth=new JPanel(); pnorth.add(new JLabel("Input row number,press Enter to confirm")); pnorth.add(inputrowsnumber); inputrowsnumber.setbackground(color.pink); psouth.add(sumrows); psouth.add(sumcolumns); getcontentpane().add(psouth,borderlayout.south); getcontentpane().add(pnorth,borderlayout.north); getcontentpane().add(new JScrollPane(table),BorderLayout.CENTER); setsize(370,250); setvisible(true); getcontentpane().validate(); setdefaultcloseoperation(jframe.exit_on_close); }

进度条组件 JProgressBar 类通过用颜色动态填充显示某任务完成的百分比 构造方法 JProgressBar() 创建一个水平进度条, 最小为 0,, 最大为 100 JProgressBar(int min, int max) JProgressBar(int orient, int min, int max) 一般方法 addchangelistener(changelistener e) 进度条注册监听器 getmaximum getminimum setmaximum(int n) setminimum(int n) getvalue 创建一个水平进度条, 最小为 min,, 最大为 max 创建一个进度条, 最小为 min,, 最大为 max,orient 为 HORIZONTAL 则为水平条,VERTICAL, 则为垂直条 获得进度条最大值获得进度条最小值 设置进度条最大值 设置进度条最小值 获得进度条当前值 setvalue(int n) 设置进度条当前值

setstring(string s) 设置进度条上文字信息 setborderpainted(boolean b) 设置进度条边框是否显示 setstringpainted(boolean b) 设置使用百分数还是字符串表示进度 注意 进度条的最大值并不是进度条的长度, 进度条的长度依赖于放置它的布局和本身是否试用了 setsize() 设置了大小 ; 实例 进度条的最大值 max 是指将进度条平均分成 max 份

树组件 简介 JTree 用来显示一个层次关系分明的一组数据, 用树状图表示能给用户一个直观而易用的感觉 JTree 可以通过树形结构分层组织数据来让用户清楚的了解各个节点之间的关系 要构造一个树组件必须事先创建出称为节点的对象 节点是树中最基本的对象, 表示在给定层次结构中的数据项 树中只有一个根节点, 除此以外的节点分为两类 : 叶节点 ( 即没有子节点的节点 ) 分支节点 ( 即有子节点的节点 ) 每个节点关联着一个描述该节点的文本标签和图像图标, 其中 : 文本标签是节点的字符串表示 图标指明该节点是否为叶节点

实现 javax.swing.tree 包中提供了一个 MutableTreeNode 接口来实现创建并成为树节点的对象 DefaultMutableTreeNode 类是实现了 MutableTreeNode 接口的类, 可以使用这个类为要创建的树准备节点, 其常用构造方法如下 : DefaultMutableTreeNode(Object userobj) DefaultMutableTreeNode(Object userobj, boolean child) 注册监听器 : 创建没有父节点和子节点 但允许有子节点的树节点, 并使用指定的用户对象对它进行初始化 创建没有父节点和子节点的树节点, 使用指定的用户对象对它进行初始化, 仅在指定时才允许有子节点 addtreeselectionlistener(treeselectionlistenere) 当鼠标单击树上的节点时, 系统将通知监听器自动调用 TreeSelectionListener 接口中的方法 valuechanged 实施相应操作

系统提供的树组件操作方法 JTree(TreeNode root) 返回一个 JTree,, 指定的 TreeNode 作为其根, 它显示根节点 getparent() 返回此节点的父节点, 如果此节点没有父节点, 则返回 null isleaf() 如果此节点没有子节点, 则返回 true getchildcount() setallowschildren(boolean b) getuserobject() 实例 返回此节点的子节点数 确定是否允许此节点拥有子节点 返回此节点的用户对象

setdefaultcloseoperation(jframe.exit_on_close); setvisible(true); setbounds(80,80,300,300); c.validate(); validate(); } public void valuechanged(treeselectionevent e){ DefaultMutableTreeNode node=(defaultmutabletreenode)tree.getlastselectedpathcomponent(); if(node.isleaf()) this.settitle((node.getuserobject()).tostring()); } } public class JTreeEx{ public static void main(string args[]){ JTreeWin win=new JTreeWin("JTree Example"); } }

中间容器 JPanel 面板 是一类无边框 不能移动 放大 缩小或关闭的容器 JPanel 不是顶层容器, 它是作为一个容器加入到其他顶层容器如 JFrame JApplet 中的 构造方法 : JPanel() 创建流布局的新 JPanel JPanel(LayoutManager layout) 实例 创建具有指定布局管理器的新 JPanel

JScrollPane 窗格 可以将一个组件放到一个滚动窗格中, 然后通过滚动条来观察这个组件 构造方法 : JScrollPane() 创建一个空的 JScrollPane,, 需要时水平和垂直滚动条都可显示 JScrollPane(int v, int h) 创建一个具有指定滚动条策略的空 JScrollPane JScrollPane(Component c) 创建一个显示指定组件内容的 JScrollPane,, 只要组件的内容超过视图大小就会显示水平和垂直滚动条 JScrollPane(Component c, int v, int h) JSplitPane 窗格 拆分窗格 : 可以用一条拆分线把容器分为左右或上下两个部分, 每个部分中都可以放置组件 构造方法 : 创建一个显示指定组件内容的 JScrollPane,, 具有指定滚动条策略

JSplitPane(int s, Component c1, Component c2) 一般方法 : 创建一个具有指定方向和指定组件的新 JSplitPane setdividerlocation(double position) JLayeredPane 分层窗格 可用来处理组件经常重叠的情况,JLayeredPane 可将容器分为五层 构造方法 一般方法 setlayer(component c, int layer) 设置分隔条的位置 JLayeredPane() 创建新的 JLayeredPane 设置指定组件的 layer 属性, 使之成为该层中最底部的组件 getlayer(component c) 返回指定 Component 的 layer 属性 add(jcomponent c. int layer) 添加组件并设置所在的层

注意 : 其中, 参数 layer 取值常量为 :»DEFAULT_LAYER( 最底层, 与其他层组件发生重叠时将被遮挡 )»PALETIE_LAYER»MODAL_LAYER»POPUP_LAYER»DRAG_LAYER( 最上层, 组件在移动中不会被遮挡, 若有许多组件, 鼠标移动一组件时可把移动组件放到 DRAG_LAYER 层 ) 若同一层上添加组件时发生重叠, 先添加的会遮挡后添加的 swing 提供两种分层面板 JLayeredPane JDesktopPane» 是 JLayeredPane 的子类, 用来容纳内部框架 (JInternalFrame) 而设置 JToolBar 工具栏 用于显示常用工具控件的容器 用户可以拖拽出一个独立的可显示工具控件的窗口, 设置相关属性 :

JToolBar.HORIZONTAL JToolBar.VERTICAL 构造方法 : JToolBar() 创建新的工具栏 ; 默认的方向为 HORIZONTAL 一般方法 : getcomponentindex(component c) 返回指定组件的索引 getcomponentatindex(int i) 返回指定索引位置的组件 实例

} b1=new JButton(new ImageIcon("1.jpg"));b1.addActionListener(this); b2=new JButton(new ImageIcon("2.jpg"));b2.addActionListener(this); b3=new JButton(new ImageIcon("3.jpg"));b3.addActionListener(this); jt=new JToolBar(); jt.add(b1);jt.add(b2);jt.add(b3); ta=new JTextArea(6,30); sp=new JScrollPane(ta); p=new JPanel(); setcontentpane(p); p.setlayout(new BorderLayout()); p.setpreferredsize(new Dimension(300,150)); p.add(jt,borderlayout.north); p.add(sp,borderlayout.center); show(); } public void actionperformed(actionevent e){ String s=""; if(e.getsource()==b1) s="you have pressed button at left!please Continue!\n"; if(e.getsource()==b2) s="you have pressed button at center!please Continue!\n"; if(e.getsource()==b3) s="you have pressed button at right!please Continue!\n"; ta.append(s); ta.setbackground(color.pink); } public static void main(string args[]){ new JToolBarEx(); }

多文档界面 Java 实现多文档界面 (MDI) 常用方式是在一个 JFrame 窗口中添加若干个被限制在 JFrame 中的内部窗体 JInternalFrame 在使用时需要将内部窗体事先添加到 JDesktopPane 桌面容器中 一个桌面容器可以添加若干个被限制在其内的内部窗体, 然后再将此桌面容器添加到 JFrame 窗体即可 构造方法 : JDesktopPane() 创建一个新的 JDesktopPane JInternalFrame() 创建不可调整大小的 不可关闭的 不可最大化的 不可图标化的 没有标题的 JInternalFrame JInternalFrame(String title, boolean resizable, 创建具有指定标题 可调整 可关闭 可最大化和 boolean closable, boolean max, boolean min) 可图标化的 JInternalFrame

一般方法 add(jinternalframe c, int layer) setlayer(jinternalframe c, int layer) getlayer(jinternalframe c) getallframes() getallframesinlayer(int layer) 添加内部窗体, 指定内部窗体所在的层次 设置内部窗体所在的层次 获取内部窗体所在的层次 返回桌面中当前显示的所有 JInternalFrames 返回桌面指定层中当前所显示的所有 JInternalFrames getselectedframe() 返回此 JDesktopPane 中当前活动的 JInternalFrame,, 如果当前没有活动的 JInternalFrame,, 则返回 null addinternalframelistener(internalframelistener listener) 添加指定的侦听器, 以从此内部窗体接收内部窗体事件 setmaximizable(boolean b) setclosable(boolean b) seticonifiable(boolean b) setresizable(boolean b) settitle(string title) setvisible() 设置 maximizable 属性, 该属性确定是否可以通过某个用户操作最大化此 JInternalFrame 设置是否可以通过某个用户操作关闭此 JInternalFrame 设置 iconable 属性, 对于能够使 JInternalFrame 变成一个图标的用户而言, 该属性必须为 true 设置是否可以通过某个用户操作调整 JInternalFrame 的大小 设置 JInternalFrame 的标题 设置内部窗体可见性

注意 : 内部窗体不同于中间容器, 不能直接把组件加入到 JInternalFrame 中, 而只能加到它的内容面板 ContentPane 中 内部窗体和 JFrame 窗体一样, 可以通过 getcontentpane() 方法得到它的内容窗体 为了能显示内部窗体, 必须把内部窗体先添加到一个专门为内部窗体服务的 JDesktopPane 容器中 内部窗体需设置初始大小, 内部窗体的内容面板的默认布局是 BorderLayout 布局 JOptionPane 和 JDialog 对话框 对话框的模式与方法 对话框分为模式 (Modal) 和非模式 (Non-modal) 两种 模式对话框 : 对话框程序必须确认才能继续运行 ; 非模式对话框 : 显示对话框后, 用户可以不用关闭此对话框就可继续程序的运行

构造方法 : JOptionPane() 创建一个带有测试消息的 JOptionPane JOptionPane(Object msg, int msgtype) JOptionPane(Object msg, int optiontype,, Icon icon) JDialog(Dialog owner, String str) JDialog(Dialog owner, boolean model) msgtype, int JDialog(Dialog owner, String str, boolean model) 创建一个显示消息的 JOptionPane 的实例, 使其具有指定的消息类型和默认选项 创建一个显示消息的 JOptionPane 的实例, 使其具有指定的消息类型 选项和图标 JDialog() 创建一个没有标题并且没有指定 Frame 所有者的无模式对话框 创建一个具有指定标题和指定所有者对话框的无模式对话框 创建一个具有指定所有者 Dialog 和模式的对话框 创建一个具有指定标题 模式和指定所有者 Dialog 的对话框

静态方法 showinputdialog(object msg) showinputdialog(component parentc,, Object msg,, String str, int msgtype) 显示请求用户输入的问题消息对话框 显示请求用户输入内容的对话框, 它以 parentc 为父级, 该对话框的标题为 str,, 消息类型为 msgtype showmessagedialog(component parentc,, Object msg) showmessagedialog(component parentc,, Object msg,, String str, int msgtype) ShowConfirmDialog(Component parentc,, Object msg) ShowConfirmDialog(Component parentc,, Object msg,, String str, int opttype) 调出信息为 msg 消息对话框调出对话框, 它显示使用由 msgtype 参数确定的默认图标的 message 调出带有选项 Yes No 和 Cancel 的对话框 ; 标题为 Select an Option 调出一个由 opttype 参数确定其中选项数的对话框

一般方法 : setsize() setmodal(boolean b) gettitle() settitle(string title) setvisible(boolean b) 设置对话框大小 设置对话框模式 获取对话框标题 设置对话框标题 设置对话框是否可见 JOptionPane 对话框 提供了多种可供用户使用的对话框以及相应的静态方法, 指定该方法中的有关参数就可以很容易的引用 JOptionPane 类赋予的对话框 JOptionPane 对话框主要分为以下四种类型 : ShowMessageDialog: 用于向用户显示一些信息, 含有 确定 按钮 方法中的 msgtype 可以取以下值 :»JOptionPane.WARNING_MESSAGE»JOptionPane.INFORMATION_MESSAGE»JOptionPane.QUESTION_MESSAGE

»JOptionPane.ERROR_MESSAGE»JOptionPane.PLAIN_MESSAGE 注意 : 以上这些值可以确定对话框的外观 ShowInputDialog: 用于提示用户进行数据输入, 通过返回一个确认 / 否消息给系统以决定取舍 ShowOptionDialog: 用于给出可供用户选择的对话框 ShowConfirmDialog: 用于想用户提问一个要求确认的信息, 并可得到 YES/NO/CANCEL 的响应, 方法中的 msgtype 可取以下值 :»JOptionPane.YES_NO_OPTION»JOptionPane.OK_CANCEL_OPTION»JOptionPane.YES_NO_CANCEL_OPTION 当对话框消失后,showConfirmDialog 方法会返回下列整数值之一 :»JOptionPane.YES_OPTION»JOptionPane.NO_OPTION»JOptionPane.OK_OPTION»JOptionPane.CANCEL_OPTION»JOptionPane.CLOSED_OPTION

实例

} else if(e.getsource()==b2){ title="question"; dialogtype=joptionpane.question_message; JOptionPane.showMessageDialog(null,content,title,dialogType); } else if(e.getsource()==b3){ title="input"; dialogtype=joptionpane.question_message; JOptionPane.showInputDialog(null,content,title,dialogType); } else{ title="confirm"; dialogtype=joptionpane.yes_no_option; JOptionPane.showConfirmDialog(null,content,title,dialogType); } } } public static void main(string args[]){ JOptionPaneEx jp=new JOptionPaneEx(); }

JDialog 对话框 如果 JOptionPane 提供的对话框无法满足我们的要求, 就需要使用 JDialog 来自行设计对话框 JDialog 类和 JFrame 类都是 Window 的子类, 两者都依赖于某个窗口或组件, 都可以将相关组件添加到内容面板 ContentPane 中 当 JDialog 对话框依赖的窗口或组件消失, 对话框也消失 ; 而当它所依赖的窗口或组件可见时, 对话框又会自动恢复 需要注意的是 : 不可以直接将组件添加到 JDialog 对象中, 而需要通过 getcontentpane 方法获得内容面板, 然后将组件添加到内容面板中去 ; 不可以对 JDialog 设置布局, 而是为其内容面板设置布局, 默认布局为 BorderLayout 实例 :

public class JDialogEx extends JFrame{ JLabel l1=new JLabel("please click yes or no button"); JLabel l2=new JLabel(" "); JButton b1=new JButton("display JDialog"); JButton b2=new JButton("yes"); JButton b3=new JButton("no"); private JDialog jd=new JDialog(); private JFrame jf; public JDialogEx(){ super("jdialog Example"); jf=new JFrame("JDialog"); Container c=getcontentpane(); c.setbackground(color.orange); c.setlayout(new GridLayout(2,1,20,20)); c.add(b1);c.add(l2); Container d1=jd.getcontentpane(); d1.setlayout(new FlowLayout()); d1.add(l1);d1.add(b2);d1.add(b3); b1.addactionlistener(new handle()); b2.addactionlistener(new handle()); b3.addactionlistener(new handle()); setsize(200,150); setvisible(true); }

} public class handle implements ActionListener{ public void actionperformed(actionevent e){ if(e.getsource()==b1){ jd.setbounds(150,150,200,150); jd.show(); } else if(e.getsource()==b2){ jd.hide(); l2.settext("you have selected yes button"); } else{ jd.hide(); l2.settext("you have selected no button"); } } } public static void main(string args[]){ JDialogEx jde = new JDialogEx(); }

多媒体程序设计 Java 屏幕坐标系 单位 : 像素 Graphics 主要方法 draw3drect(int x, int y, int w, int h, boolean raised) fill3drect(int x, int y, int w, int h, boolean raised) drawline(int x1, int y1, int x2, int y2) drawrect(int x, int y, int w, int h) 绘制以 (x,y) 为起点宽高为 w 和 h 的 3D 矩形, 当 raised 为 true 时 3D 效果为凸 填充以 (x,y) 为起点宽高为 w 和 h 的 3D 矩形, 当 raised 为 true 时 3D 效果为凸 画点 (x1,y1) 和点 (x2,y2) 之间的直线 绘制以 (x,y) 为起点宽高为 w 和 h 的矩形

fillrect(int x, int y, int w, int h) clearrect(int x, int y, int w, int h) drawroundrect(int x, int y, int w, int h, int arcw, int arch) fillroundrect(int x, int y, int w, int h, int arcw, int arch) drawoval(int x, int y, int w, int h) filloval(int x, int y, int w, int h) drawarc(int x, int y, int h, int sang, int arcang) fillarc(int x, int y, int h, int sang, int arcang) drawpolygon(int x[ ], int y[ ], int points) fillpolygon(int x[ ], int y[ ], int points) 填充以 (x,y) 为起点宽高为 w 和 h 的矩形 以背景色填充以 (x,y) 为起点宽高为 w 和 h 的矩形 绘制以 (x,y) 为起点宽高为 w 和 h 的圆角矩形, 四个圆角的宽度为 arcw,, 高度为 arch 填充以 (x,y) 为起点宽高为 w 和 h 的圆角矩形, 四个圆角的宽度为 arcw,, 高度为 arch 以 (x,y) 为起点 按宽高为 w 和 h 的外接矩形绘制椭圆 以 (x,y) 为起点 按宽高为 w 和 h 的外接矩形填充椭圆 以 sang 为起始角,arcAng, 为张角画圆弧或扇形, 逆时针为正 以 sang 为起始角,arcAng, 为张角填充圆弧或扇形, 顺时针为负 按照 x[] 和 y[] 数组为定点绘制封闭的 points 边形 按照 x[] 和 y[] 数组为定点填充封闭的 points 边形

图形处理 利用 Graphics 类提供的方法绘制图形 绘制直线 绘制矩形 绘制圆角矩形 绘制 3D 矩形 绘制椭圆 绘制圆弧和扇形 绘制多边形 颜色 Color(int r, int g, int b) Color(float r, float g, float b) Color(int rgb) 创建具有指定红绿蓝值的不透明 srgb 颜色, 值范围为 0-255 创建具有指定红绿蓝值的不透明 srgb 颜色, 值范围为 0.0-1.0 创建具有指定组合的 RGB 值的不透明的 srgb 颜色, 此 srgb 值的 16-23 位表示红色分量,8-15, 位表示绿色分量,0-7, 位表示蓝色分量

此外还有系统定义的 13 中颜色常量 :»WHITE / RED / GREEN / BLUE / GRAY / YELLOW / CYAN / BLACK / MAGENTA / PINK / DARKGRAY / LIGHTGRAY / ORANGE 文本字体设置 Font(String name, int style, int size) 根据指定名称 样式和磅值大小, 创建一个新 Font setfont(font font) getfont() getname() getstyle() getsize() 直接导入图形文件进行处理 声明 Image 类型的变量 通过 java.awt 下 Component 类的 createimage() 方法完成 Image createimage(imageproducer img) Image createimage(int w, int h) 设置字体 获取字体对象 获取字体的逻辑名字 获取字体字型 获取字体大小 使用指定的图像生成器创建一幅图像 返回具有 w 宽 h 高的空图像

java.awt.image 包中提供类 MemoryImageSource 适用于在内存中生成一幅图像 MemoryImageSource(int w, int h, int pix[ ], int start, int scan) 使用 getimage() 加载图像 在内存中生成一幅图像, 其中 pix[] 代表图像每一点颜色值,start, 代表起始位置,scan, 代表图像扫描线宽度 getimage(url url) getimage(url url,, String name) getimage(url url) getimage(string filename) 获取 url 中的图像获取指定 url 下文件 name 中的图像获取 url 中的图像获取指定 url 下文件 filename 中的图像 使用 drawimage() 绘制图像 drawimage(image ImageObserver obs) img, int x, int y, drawimage(image img, int x, int y, int w, int h, Color bg, ImageObserver obs) 绘制指定图像中当前可用的图像 绘制指定图像中当前可用的图像, 其中 bg 是在图像非透明部分下绘制的背景色

图像的缩放 声音处理 当 drawimage 语句和原来图片显示的宽 / 高度不一样时, 系统就自动进行缩放处理 图像旋转与透明处理 简单方式 play(url url) awt 包中提供了一个二维增强图像类 Graphics2D, 能够对图像及文本进行旋转 透明等处理 以 2D 方式进行处理, 需要将绘图区转换为 Graphics2d 类型, 然后调用其方法完成 ; 绘制透明图像时, 需要设定图形交叉区的颜色合成模式, 该模式由 AlphaComposite 类生成, 并由 Graphics2D 类设定 play(url url,, String name) 播放指定 url 的声音 播放指定 url 下声音文件 name 的声音 其中 url 表示声音文件的位置, 一般用 getcodebase() 或 getdocumentbase() 代表

可控制声音的播放 获取 AudioClip 对象 : getaudioclip(url url) getaudioclip(url url,, String name) AudioClip 提供的三个方法 : 从 url 获取 AudioClip 对象 play(): 从头开始播放声音, 只播放一次 ; loop(): 循环播放 stop(): 停止当前正在播放的声音 从 url 下声音文件 name 获取 AudioClip 对象