Microsoft Word - 第13章.doc

Size: px
Start display at page:

Download "Microsoft Word - 第13章.doc"

Transcription

1 241

2 Java 从入门到精通 第 13 章 Swing 用户界面设计 AWT 存在缺少剪贴板 打印支持等缺陷, 甚至没有弹出式菜单和滚动窗口等, 因此 Swing 的产生也就成为必然 Swing 是纯 Java 实现的轻量级 (light-weight) 组件, 它不依赖系统的支持 本章主要讨论 Swing 组件基本的使用方法和使用 Swing 组件创建用户界面的初步方法 13.1 Swing 基础 Swing 元素比 AWT 元素具有更好的屏幕显示性能 Swing 用 100% 纯 Java 实现, 所以 Swing 具有 Java 的跨平台性 Swing 不是真正使用原生平台提供设备, 而是仅仅在模仿, 因此可以在任何平台上使用 Swing 图形用户界面组件 Swing 绝大部分组件都是轻量级组件, 它不像重量级组件那样必须在它们自己本地窗口中绘制, 而是在它们所在的重量级窗口中绘制 注意 :AWT 组件具有平台相关性, 它是系统对等类的实现 ; 而 Swing 组件在不同平台具有一致性的表现, 另外还可以提供本地系统不支持的一些特征, 因此 Swing 比 AWT 的组件实用性更强 Swing 采用了 MVC(Model-View-Controller, 即模型 - 视图 - 控制 ) 设计模式 Swing 的类层次结构 在 javax.swing 包中, 有两种类型的组件 : 顶层容器 (Jframe Japplet JDialog 和 JWindow) 和轻量级组件 Swing 轻量级组件都是由 AWT 的 Container 类直接或间接派生而来 java.awt.component +-java.awt.container +-java.awt.window +-java.awt.frame-javax.swing.jframe +-javax.dialog-javax.swing.jdialog +-javax.swing.jwindow +-java.awt.applet-javax.swing.japplet +-javax.swing.box +-javax.swing.jcomponet Swing 包是 JFC(Java Foundation Classes) 的一部分, 它由许多包组成, 如表 13-1 所示 表 13-1 Swing 包组成内容 包 Com.sum.swing.plaf.motif Com.sum.java.swing.plaf.windows javax.swing 描述实现 Motif 界面样式代表类实现 Windows 界面样式的代表类 Swing 组件和使用工具 续表 242

3 第 13 章 Swing 用户界面设计 包 javax.swing.border javax.swing.colorchooser javax.swing.event javax.swing.filechooser javax.swing.pending 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 描述 Swing 轻量组件的边框 JcolorChooser 的支持类 / 接口事件和侦听器类 JFileChooser 的支持类 / 接口未完全实现的 Swing 组件抽象类, 定义 UI 代表的行为实现所有标准界面样式公共基类实现 Metal 界面样式代表类 Jtable 组件支持文档的显示和编辑支持显示和编辑 HTML 文档 Html 文档的分析器支持显示和编辑 RTF 文件 Jtree 组件的支持类支持取消操作 javax.swing 包是 Swing 提供的最大包, 它大约包含 100 个类和 25 个接口, 并且绝大部分 Swing 组件都包含在 swing 包中 (JtableHeader JtextComponent 除外, 分别在 swing.table 和 swing.text 包中 ) javax.swing.event 包中定义了事件和事件处理类, 这与 java.awt.event 包类似, 主要包括事件类和监听器接口 事件适配器 javax.swing.pending 包主要是一些没有完全实现的组件 javax.swing.table 包主要是 Jtable 类的支持类 javax.swing.tree 包同样也是 Jtree 类的支持类 javax.swing.text swing.text.html swing.text.html.parser 和 swing.text.rtf 包都是与文档显示和编辑相关的包 Swing 的特点 在正式学习 Swing 之前, 先来看一下 Swing 的特点, 这也是和 AWT 的不同之处 Swing 的特点包括以下几点 (1) 组件的多样化 Swing 的基础是 AWT, 它提供了比 AWT 更多的图形界面组件 Swing 组件的类名都是以字母 J 开头, 除 AWT 具有的基本组件外 ( 按钮 JButton 标签 JLabel 复选框 JCheckBox 菜单 JMenu), 还增加了许多比较复杂的高级组件, 例如表格 (JTable) 树 (JTree) (2)MVC 模式 Swing 比较突出的特点在于 MVC 模型的普遍实用性 MVC 模型主要包括 3 部分结构 : 模型 视图和控制器 模型 (Model) 用于保存所用到的数据 ; 视图 (View) 用于显示数据内容 ; 控制器 (Controller) 用于处理用户和模块交互事件 当模型的数据改变, 243

4 Java 从入门到精通会通知与之相关的视图, 视图通过控制器指定相应机制 为了简化工作,Swing 组件将视图和控制器合二为一 MVC 设计思想是图形用户界面设计比较通用, 这样可以使内容本身和显示方式分类, 使数据显示更加灵活多变 (3) 可存取性支持 为了实现可存取性的支持, 所有 Swing 组件实现了 Accessible 接口, 这样一些辅助功能 ( 屏幕阅读器 ) 也可以得到实现 (4) 支持键盘操作 JComponent 类的 registerkeyboardaction() 方法可以实现用键盘操作代替用户鼠标操作, 相当于传统意义的热键操作 (5) 设置边框 Swing 组件可以设置一个或者多个边框, 并且提供多种类型的边框供用户选择, 甚至用户可以建立组合边框或自己设计边框 另外空白边框可以使组件变大, 协助布局管理器布局 (6) 使用图标 (Icon) Swing 组件另外一个更加丰富的功能就是许多组件可以通过图标修饰自己 Swing 程序结构简介 Swing 的程序设计一般可按照以下流程进行 (1) 通过 import 引入 swing 包 (2) 设置 GUI 的 外观界面风格 (3) 创建顶层容器 (4) 创建按钮和标签等组件 (5) 将组件添加到顶层容器 (6) 在组件周围添加边界 (7) 进行事件处理 下面是第一个 Swing 程序 // 文件 : 程序 13.1 SwingApplication.java 描述 :SwingApplication 演示 // 导入需要使用的包和类 import javax.swing.*; // 引入 Swing 包名 import java.awt.*; import java.awt.event.*; public class SwingApplication public static void main(string[ ] args) try //try 语句块, 监视该段程序 // 设置窗口风格 244 UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); catch (Exception e) // 捕获异常 e.printstacktrace(); // 异常信息输出 JFrame frame = new JFrame("Swing 应用程序 "); // 创建, 并初始化顶层容器并 Container c = frame.getcontentpane(); // 获取面板容器 JPanel pane = new JPanel(); // 创建, 并初始化面板 panel c.add(pane); // 将面板添加到窗口 pane.setlayout(new FlowLayout()); // 设置布局管理器 FlowLayout final JLabel label = new JLabel(); // 创建, 并初始化标签 label

5 第 13 章 Swing 用户界面设计 JButton button = new JButton("Click me!"); pane.add(label); pane.add(button); // 添加事件处理 button.addactionlistener(new ActionListener() public void actionperformed(actionevent e) label.settext(" 北京欢迎您!"); ); // 窗口设置结束, 开始显示 frame.addwindowlistener(new WindowAdapter() // 匿名类用于注册监听器 public void windowclosing(windowevent e) System.exit(0); ); frame.setsize(300,240); frame.setvisible(true); // 创建, 并初始化 button // 向容器中添加组件 label // 向容器中添加组件 button // 设置 label 内容 // 程序退出 // 设置窗口大小 // 显示窗口 编写完程序后, 使用 javac 命令编译该文件产生 class 文件, 然后使用 java 命令运行该 class 文件, 运行结果如图 13-1 和图 13-2 所示 图 13-1 SwingApplication.java 运行结果一 图 13-2 SwingApplication.java 运行结果二 13.2 Swing 组件分类和基本规则 Swing 不仅使用轻量级组件代替 AWT 的重量级组件, 而且还增加了许多丰富的功能 例如 Swing 的按钮和标签等组件可以图形化 ( 即可以使用图标 ),Swing 中的组件与 AWT 对应的组件名前面加了一个 J 本节主要讲述组件的分类以及组件的基本使用规则 组件的分类 Jcomponent 是一个抽象类, 主要用于定义所有子类的通用方法 层次关系如下 java.lang.object +--java.awt.component 245

6 +--java.awt.container +--javax.swing.jcomponent Java 从入门到精通 Jcomponent 类派生于 Container 类 并不是 Swing 的所有组件都继承了 JComponent 类, 凡是派生于 Container 类的组件都可以作为容器使用 Swing 组件从功能上可分为顶层容器 中间容器 特殊容器 基本控件 信息显示组件和编辑信息组件 顶层容器 :Jframe Japplet Jdialog JWindow 中间容器 :Jpanel JscrollPane JsplitPane JToolBar 特殊容器 :GUI 中特殊作用的中间层, 例如 JinternalFrame JlayeredPane JRootPane 基本控件 : 人机交互的基本组件, 例如 Jbutton JcomboBox Jlist Jmenu Jslider JtextField 信息显示组件 : 组件仅仅为显示信息, 但不能编辑, 例如 Jlabel JprogressBar ToolTip 编辑信息组件 : 向用户显示可被编辑信息的组件, 例如 JcolorChooser JfileChoose JfileChooser Jtable JtextArea 另外,JComponent 类的一些特殊功能包括边框设置 双缓冲区 提示信息 键盘导航和支持布局 边框设置 : 使用 setborder() 方法设置组件外围边框, 如果不设置边框就会为组件的外围留出空白 双缓冲区 : 为了改善组件的显示效果, 采用双缓冲技术 JComponent 组件默认是双缓冲的, 不必要自己写代码, 可以通过 setdoublebuffered(false) 关闭双缓冲区 提示信息 :settooltiptext() 方法可为组件设置提示信息, 为用户提供帮助 键盘导航 :registerkeyboardaction() 方法可以实现键盘代替鼠标操作 支持布局 : 用户可以设置组件最大 最小和设置对齐参数值等方法, 指定布局管理器的约束条件 使用 Swing 的基本规则 与 AWT 组件不同,Swing 不能直接在顶层容器中添加组件 Swing 组件必须添加到与顶层容器相关的内容面板上, 内容面板是一个普通的轻量级组件, 还要避免使用非 Swing 轻量级组件 在顶层容器 JFrame 对象中添加组件有以下两种方式 (1) 用 getcontentpane() 方法获得容器的内容面板, 直接添加组件, 格式如下 Container c = frame.getcontentpane(); // 获取窗口内容面板 JPanel pane = new JPanel(); // 创建面板 c.add(pane); // 在容器中添加面板 (2) 建立一个中间容器对象 (Jpanel 或 JdesktopPane), 将组件添加到中间容器对象内, 然后通过 setcontentpane() 方法将该容器设置为顶层容器 frame 的内容面板 JPanel pane = new JPanel(); // 创建面板对象 pane.add(new JButton("OK")); // 给面板添加按钮 frame. setcontentpane(pane); // 将面板 pane 设置为窗口内容面板 246

7 第 13 章 Swing 用户界面设计 13.3 轻量容器 JFrame 的内部轻量容器构成结构为 : 最底层是根面板 JRootPane, 上一层是玻璃面板 glasspane( 一个 JPanel 对象 ) 和分层面板 layeredpane( 一个 JLayeredPane 对象 ), 而分层面板 layeredpane 又由内容面板 contentpane( 一个 JPanel) 和菜单条 menubar(jmenubar) 构成 用户添加组件都是在内容面板上, 背景图片只能添加到分层面板 玻璃面板是完全透明的, 缺省值为不可见, 覆盖了内容面板是为了接受鼠标事件和组件绘图功能提供方便 JrootPane 的结构如图 13-3 所示 图 13-3 JRootPane 结构 根面板 根面板 (JRootPane) 是由内容面板 菜单条和玻璃面板组成, 它可以获得和设置相关面板 java.lang.object +--java.awt.component +--java.awt.container +--javax.swing.jcomponent +--javax.swing.jrootpane 根面板提供的方法有以下几种 Container getcontentpane(): 获得内容面板 void setcontentpane(container): 设置内容面板 JMenuBar getmenubar(): 获得活动菜单条 void setmenubar(jmenubar): 设置菜单条 JLayeredPane getlayeredpane(): 获得分层面板 void setlayeredpane(jlayeredpane): 设置分层面板 Component getglasspane(): 获得玻璃面板 void setglasspane(component): 设置玻璃面板 247

8 Java 从入门到精通 面板 面板 (JPanel) 是轻量容器, 其用法与 Panel 基本相同, 用于容纳其他组件 JscrollPane JsplitPane 和 JInternalFrame 都属于常用的中间容器 面板的默认布局管理器是顺序布局管理器 (FlowLayout) java.lang.object +--java.awt.component +--java.awt.container +--javax.swing.jcomponent +--javax.swing.jpanel 分层面板 Swing 有两种类型的分层面板 :JLayeredPane 和 JDesktopPane JDesktopPane 是 JLayeredPane 的派生类, 用于创建多文档和虚拟桌面程序的容器 用户可以创建内部框架 (JInternalFrame) 对象并将其添加到 JDesktopPane 它们的继承关系如下 java.lang.object +--java.awt.component +--java.awt.container +--javax.swing.jcomponent +--javax.swing.jlayeredpane +--javax.swing.jdesktoppane 滚动窗口 滚动窗口 (JScrollPane) 是管理视口 (JViewport) 可选水平或垂直滚动条的轻量级容器 滚动窗口基本上是由 JScrollBar 一个 JViewport 之间的连接组成 Jviewport 是用于查看底层组件的一个工具, 滚动条沿着组件的水平或者垂直方法移动视口, 同时显示组件上的内容 JScrollPane 继承关系如下 java.lang.object +--java.awt.component +--java.awt.container +--javax.swing.jcomponent +--javax.swing.jscrollpane 分隔板 分隔板 (JSplitPane) 用于提供可拆分的窗口, 但只能分隔成两个容器 它可支持水平和垂直两种拆分类型, 还可以带滚动条 分隔板的继承关系如下 248 java.lang.object +--java.awt.component +--java.awt.container +--javax.swing.jcomponent

9 第 13 章 Swing 用户界面设计 +--javax.swing.jsplitpane 常用的方法有以下几种 void addimpl(component comp,object constraints,int index): 将组件添加到次分隔窗口 void settopcomponent(component comp): 将组件设置到分隔条上面或者左边 void setdividerlocation(double proportionallocation): 设置分隔条的位置 void setdividersize(int newsize): 设置分隔条的大小 选项板 选项板 (JTabbedPane) 提供允许用户通过单击具有标题和图标的选项卡, 在组件之间切换的组件 通过 addtab 和 inserttab 方法添加选项卡 组件到 TabbedPane 对象中 选项卡可以通过对应位置的索引表示, 第一个索引值为 0 java.lang.object +--java.awt.component +--java.awt.container +--javax.swing.jcomponent +--javax.swing.jtabbedpane 常用的方法有以下几种 add(string title,component component): 添加一个带标题的组件 addchangelistener(changelistener l): 将一个 ChangeListener 注册到选项卡窗口中 addtab(string title, Icon icon, Component component, String tip): 添加指定标题 图标的组件, 任意一个参数都可以为 null inserttab(string title, Icon icon, Component component, String tip, int index): 在索引 index 插入一个 component, 该组件指定标题 图标和提示 工具栏 工具栏 (JToolBar) 是显示常用工具组件的容器, 可以将工具栏拖动出来成为一个独立的工具条 工具栏的继承关系如下 java.lang.object +--java.awt.component +--java.awt.container +--javax.swing.jcomponent +--javax.swing.jtoolbar 常用的方法有以下几种 JToolBar(String name): 构造方法 addimpl(component comp, Object constraints, int index): 在工具栏中添加新的 JButton getcomponentindex(component c): 返回组件的序号 249

10 Java 从入门到精通 getcomponentatindex(int i): 返回序号为 i 的组件 13.4 Swing 组件 Swing 的组件与 AWT 组件相似, 但又为每一个组件增添了新的方法, 并提供了更多的高级组件 所以本节 Swing 的基本组件选取了几个比较典型的组件进行详细讲解 按钮 Swing 中, 所有类型的按钮都是 javax.swing.abstractbutton 类的子类 用户使用 Swing 按钮可以显示图像, 将整个按钮设置为窗口缺省图标, 并且可将多个图像指定给一个按钮, 来处理鼠标在按钮上的事件 JButton 类的继承关系如下 250 java.lang.object +--java.awt.component +--java.awt.container +--javax.swing.jcomponent +--javax.swing.abstractbutton +--javax.swing.jbutton 常用的构造方法有以下几种 JButton(Icon icon): 按钮上显示图标 JButton(String text): 按钮上显示字符 JButton(String text, Icon icon): 按钮上既显示图标又显示字符 下面是一个使用 JButton 的例子 // 文件 : 程序 13.2 ButtonIcon.java 描述 :JButton 演示 // 导入需要使用的包和类 import javax.swing.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.windowadapter; import java.awt.event.windowevent; public class ButtonIcon extends JPanel implements ActionListener public static void main(string[ ] args) JFrame jf = new JFrame(); // 创建, 并初始化窗口对象 jf ButtonIcon bi = new ButtonIcon(); // 创建, 并初始化图标对象 bi jf.getcontentpane().add(bi); // 获取面板容器, 并添加按钮 jf.setsize(400, 130); // 设置窗口大小 jf.setvisible(true); // 显示窗口 jf.addwindowlistener(new WindowAdapter() // 匿名类用于注册监听器 public void windowclosing(windowevent e) System.exit(0); // 程序退出 ); // 声明 ButtonIcon 类构造方法 public ButtonIcon()

11 第 13 章 Swing 用户界面设计 super(); // 调用父类构造方法 button = new JButton[3]; // 初始化 JButton 数组 imageicon = new ImageIcon[3]; // 初始化 ImageIcon 数组 // 保存三个图标 imageicon[0] = new ImageIcon("images\\first.gif"); // 初始化图标 imageicon[0] imageicon[1] = new ImageIcon("images\\second.gif"); // 初始化图标 imageicon[1] imageicon[2] = new ImageIcon("images\\third.gif"); // 初始化图标 imageicon[2] button[0] = new JButton(imageIcon[0]); // 初始化 button[0] button[1] = new JButton(imageIcon[1]); // 初始化 button[1] button[2] = new JButton(imageIcon[2]); // 初始化 button[2] add(button[0]); // 添加按钮 button[0] add(button[1]); // 添加按钮 button[1] add(button[2]); // 添加按钮 button[2] button[0].addactionlistener(this); // 为按钮 button[0] 添加监听器 ActionListener button[1].addactionlistener(this); // 为按钮 button[1] 添加监听器 ActionListener button[2].addactionlistener(this); // 为按钮 button[2] 添加监听器 ActionListener public void actionperformed(actionevent e) ImageIcon imageiconc; // 创建 ImageIcon 对象 if( (JButton)e.getSource() == button[0]) // 判断事件源是否是 button[0] for(int i = 0; i < 3; i++) button[i].seticon(imageicon[(i+1)%3]); // 为 button[i] 设置图标 // 更换图标 imageiconc = imageicon[0]; imageicon[0] = imageicon[1]; imageicon[1] = imageicon[2]; imageicon[2] = imageiconc; imageiconc = null; // 设置 imageiconc 为 null else if((jbutton)e.getsource() == button[2]) // 判断事件源是否是 button[2] for(int i = 2; i >= 0; i--) button[i].seticon(imageicon[(i-1+3)%3]); // 为 button[i] 设置图标 // 更换图标 imageiconc = imageicon[2]; // 将 imageicon[2] 引用指向 imageiconc imageicon[2] = imageicon[1]; // 将 imageicon[1] 引用指向 imageicon[2] imageicon[1] = imageicon[0]; // 将 imageicon[0] 引用指向 imageicon[1] imageicon[0] = imageiconc; // 将 imageiconc 引用指向 imageicon[0] imageiconc = null; // 设置 imageiconc 为 null JButton button[ ]; // 声明 JButton 类型数组 button ImageIcon imageicon[ ]; // 声明 ImageIcon 类型数组 imageicon 图 13-4 ButtonIcon.java 运行结果 编写完程序后, 使用 javac 命令编译该文件产生 class 文件, 然后使用 java 命令运行该 class 文件, 运行结果如图 13-4 所示 程序 13.2 中, 首先创建了 3 个按钮对象, 并为第一个和第三个按钮添加监听器接口处理鼠标单击事件 当鼠标单击第一个按钮时,3 个图标左方向循环, 当鼠标单 251

12 击第三个按钮时,3 个图标右方向循环 Java 从入门到精通 复选框 复选框 (JcheckBox) 可以满足在多个选项中选择一个或者多个选项, 它比 AWT 的复选框具有更多的优点, 例如可以显示图片 该类是 javax.swing.jtogglebutton 的子类, 其继承关系如下 252 java.lang.object +--java.awt.component +--java.awt.container +--javax.swing.jcomponent +--javax.swing.abstractbutton +--javax.swing.jtogglebutton +--javax.swing.jcheckbox 复选框的构造方法有以下几种 JCheckBox(): 创建一个无文本 无图标 未被选定的复选框 JCheckBox(Action a): 创建一个复选框, 属性由参数 Action 提供 JCheckBox(Icon icon): 创建一个有图标 但未被选定的复选框 JCheckBox(Icon icon, boolean selected): 创建一个有图标, 并且指定是否被选定的复 选框 JCheckBox(String text): 创建一个有文本, 但未被选定的复选框 JCheckBox(String text, boolean selected): 创建一个有文本, 并且指定是否被选定的 复选框 JCheckBox(String text, Icon icon): 创建一个指定文本和图标, 但未被选定的复选框 JCheckBox(String text, Icon icon, boolean selected): 创建一个指定文本和图标, 并指 定是否被选定的复选框 下面是一个使用复选框的例子 // 文件 : 程序 13.3 JCheckBoxDemo.java 描述 :JCheckBox 演示 // 导入需要使用的包和类 import javax.swing.*; import java.awt.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.windowadapter; import java.awt.event.windowevent; public class JCheckBoxDemo extends JPanel implements ActionListener public static void main(string[ ] args) JFrame jf = new JFrame(); // 创建, 并初始化 JFrame 对象 jf JCheckBoxDemo bi = new JCheckBoxDemo(); // 创建, 并初始化 JCheckBoxDemo 对象 bi jf.getcontentpane().add(bi); // 获取窗口面板, 并添加面板 bi jf.setsize(500, 230); // 设置窗口大小 jf.setvisible(true); // 显示窗口 jf.addwindowlistener(new WindowAdapter() // 匿名类用于注册监听器 public void windowclosing(windowevent e)

13 第 13 章 Swing 用户界面设计 System.exit(0); // 程序退出 ); jf.pack(); // 调整窗口大小, 适应内部组件的大小和布局 // 声明 JCheckBoxDemo 类的构造方法 public JCheckBoxDemo() super(); // 调用父类的构造方法 this.setlayout(new GridLayout(2,1)); // 设置窗口的布局管理器 GridLayout button = new JCheckBox[3]; // 初始化数组 button imageicon = new ImageIcon[6]; // 初始化数组 imageicon ftf = new JTextField (20); // 初始化单行文本区 ftf panel = new JPanel(); // 初始化 panel add(ftf); // 在窗口中添加组件 ftf // 初始化图标数组 imageicon imageicon[0] = new ImageIcon("images\\Cat1.jpg"); // 初始化数组元素 imageicon[0] imageicon[1] = new ImageIcon("images\\Rabbit1.jpg"); // 初始化数组元素 imageicon[1] imageicon[2] = new ImageIcon("images\\Dog1.jpg"); // 初始化数组元素 imageicon[2] imageicon[3] = new ImageIcon("images\\Cat.jpg"); // 初始化数组元素 imageicon[3] imageicon[4] = new ImageIcon("images\\Rabbit.jpg"); // 初始化数组元素 imageicon[4] imageicon[5] = new ImageIcon("images\\Dog.jpg"); // 初始化数组元素 imageicon[5] // 初始化按钮数组 button[0] = new JCheckBox(" 猫 ",imageicon[0]); // 初始化数组元素 button[0] button[1] = new JCheckBox(" 兔 ",imageicon[1]); // 初始化数组元素 button[1] button[2] = new JCheckBox(" 狗 ",imageicon[2]); // 初始化数组元素 button[2] // 将按钮数组的各个按钮添加在面板 panel 中 panel.add(button[0]); // 将按钮 button[0] 添加到面板 panel panel.add(button[1]); // 将按钮 button[1] 添加到面板 panel panel.add(button[2]); // 将按钮 button[2] 添加到面板 panel add(panel); // 将面板添加在窗口中 button[0].addactionlistener(this); // 为按钮 button[0] 添加 ActionListener 监听器 button[1].addactionlistener(this); // 为按钮 button[1] 添加 ActionListener 监听器 button[2].addactionlistener(this); // 为按钮 button[2] 添加 ActionListener 监听器 public void actionperformed(actionevent e) String select = ""; // 创建, 并初始化字符串对象 for(int i =0; i < button.length; i++) if( button[i].isselected()) // 判断选择的对象 select = select + (i == 0?" 猫 ":i==1?" 兔 ":" 狗 "); // 设置字符串的值 select button[i].seticon(imageicon[i+3]); // 设置按钮图标 else button[i].seticon(imageicon[i]); // 设置按钮图标 ftf.settext(select); // 设置文本框文本内容 JCheckBox button[ ]; // 声明 JCheckBox 对象数组域 ImageIcon imageicon[ ]; // 声明 ImageIcon 对象数组域 JTextField ftf; // 声明 JTextField 对象数组域 JPanel panel; // 声明 JPanel 对象数组域 253

14 Java 从入门到精通 编写完程序后, 使用 javac 命令编译该文件产生 class 文件, 然后使用 java 命令运行该 class 文件, 运行结果如图 13-5 所示 程序 13.3 中, 主要展示了复选框可以显示图标的特性 该程序先创建, 并初始化 ImageIcon 对象数组, 然后通过图标创建并初始化 JCheckBox 对象数组, 为多选框对象添加了 ActionListener 监听器, 监听器方法 actionperformed 根据是否选择该复选框来显示不同的图标效果 单选框 图 13-5 JCheckBoxDemo.java 运行结果 254 单选框 (JRadioButton) 与 AWT 中的复选框组功能类似, 其继承关系如下 java.lang.object +--java.awt.component +--java.awt.container +--javax.swing.jcomponent +--javax.swing.abstractbutton +--javax.swing.jtogglebutton +--javax.swing.jradiobutton JRadioButton 与 ButtonGroup 配合使用时创建一组按钮, 并且一次只能选择其中的一个按钮, 通过 add() 方法将 JRadioButton 对象添加到该组中 注意 : 使用 ButtonGroup 对象进行分组是逻辑分组而不是物理分组 创建一组按钮通常需要创建一个 JPanel 或者类似容器, 并将按钮添加到容器中 JRadioButton 的构造方法有以下几种 JRadioButton(): 创建一个未指定图标和文本, 并且未被选定的单选按钮 JRadioButton(Action a): 创建一个属性来自 Action 的单选按钮 JRadioButton(Icon icon): 创建一个指定图标但未指定文本, 未被选定的单选按钮 JRadioButton(Icon icon, boolean selected): 创建一个指定图像和状态, 但无文本的单选按钮 JRadioButton(String text): 创建一个指定文本, 但无图标未被选择的单选按钮 JRadioButton(String text, boolean selected): 创建一个执行文本和选择状态的单选按钮 JRadioButton(String text, Icon icon): 创建一个指定文本和图标, 但未被选择的单选按钮 JRadioButton(String text, Icon icon, boolean selected): 创建一个具有指定的文本 图像和选择状态的单选按钮 下面是一个使用 JRadioButton 的例子 // 文件 : 程序 13.4 JRadioButtonDemo.java 描述 :JRadioButton 演示 // 导入需要使用的包和类 import javax.swing.*; import java.awt.*;

15 第 13 章 Swing 用户界面设计 import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.windowadapter; import java.awt.event.windowevent; public class JRadioButtonDemo extends JPanel implements ActionListener public static void main(string[ ] args) JFrame jf = new JFrame(); // 创建, 并初始化 JFrame 对象 jf JRadioButtonDemo bi = new JRadioButtonDemo(); // 创建并初始化 JRadioButtonDemo 对象 bi jf.getcontentpane().add(bi); // 获取内容面板, 并添加组件 bi jf.setsize(500, 230); // 设置窗口大小 jf.setvisible(true); // 显示窗口 jf.addwindowlistener(new WindowAdapter() // 匿名类用于注册监听器 public void windowclosing(windowevent e) System.exit(0); // 退出程序 ); jf.pack(); // 调整窗口的大小 // 声明 JRadioButtonDemo 类构造方法 public JRadioButtonDemo() super(); // 调用父类构造方法 this.setlayout(new GridLayout(2,1)); // 设置窗口布局管理器 GridLayout button = new JRadioButton[2]; // 初始化 JRadioButton 数组 imageicon = new ImageIcon[4]; // 初始化 ImageIcon 数组 ftf = new JTextField (20); // 初始化 JTextField 对象 ftf panel = new JPanel(); // 初始化 JPanel 对象 panel bg = new ButtonGroup(); // 初始化 ButtonGroup 对象 bg add(ftf); // 添加单行文本区到窗口 // 初始化图标数组 imageicon imageicon[0] = new ImageIcon("images\\male0.gif"); // 初始化图标数组元素 imageicon[0] imageicon[1] = new ImageIcon("images\\female0.gif"); // 初始化图标数组元素 imageicon[1] imageicon[2] = new ImageIcon("images\\male.gif"); // 初始化图标数组元素 imageicon[2] imageicon[3] = new ImageIcon("images\\female.gif"); // 初始化图标数组元素 imageicon[3] // 初始化单选按钮数组 button button[0] = new JRadioButton(imageIcon[0]); // 初始化按钮数组元素 button[0] button[1] = new JRadioButton(imageIcon[1]); // 初始化按钮数组元素 button[1] panel.add(button[0]); // 将按钮 button[0] 添加到面板 panel panel.add(button[1]); // 将按钮 button[1] 添加到面板 panel // 使用 bg 创建一组单选按钮 bg.add(button[0]); // 在 bg 中添加 button[0] bg.add(button[1]); // 在 bg 中添加 button[1] add(panel); // 在窗口中添加面板 panel button[0].addactionlistener(this); // 为 button[0] 按钮添加监听器 ActionListener button[1].addactionlistener(this); // 为 button[1] 按钮添加监听器 ActionListener public void actionperformed(actionevent e) ImageIcon imageiconc; // 创建 ImageIcon 对象 String select = ""; // 创建字符创变量 select for(int i =0; i < button.length; i++) 255

16 if( button[i].isselected()) else Java 从入门到精通 select = select + (i == 0?" 男 ":" 女 "); // 为 select 字符串赋值 button[i].seticon(imageicon[i+2]); // 设置按钮图标 button[i].seticon(imageicon[i]); ftf.settext(select); JRadioButton button[ ]; ImageIcon imageicon[ ]; ButtonGroup bg; JTextField ftf; JPanel panel; 编写完程序后, 使用 javac 命令编译该文件产生 class 文件, 然后使用 java 命令运行该 class 文件, 运行结果如图 13-6 所示 程序 13.4 与程序 13.3 类似, 都是首先创建图标对象数组, 然后通过图标创建 JRadioButton 对象, 并为每一个按钮添加 ActionListener 监听器实现 actionperformed 方法 根据选择的内容, 图标显示不同的效果 // 设置按钮图标 // 设置 ftf 文本内容 // 声明 JRadioButton 类型数组 // 声明 ImageIcon 类型数组 // 声明 ButtonGroup 类型 bg // 声明 JTextField 类型 ftf // 声明 JPanel 类型 panel 图 13-6 JRadioButtonDemo.java 运行结果 组合框 组合框 (JcomboBox) 是将按钮 可编辑字段以及下拉菜单组合的组件 用户可以从下拉列表中选择不同的值, 如果组合框处于可编辑状态, 用户可以键入值 组合框的构造方法有以下几种 JComboBox(): 创建一个没有数据选项的组合框 JComboBox(ComboBoxModel amodel): 创建一个数据来源于 ComboBoxModel 的组合框 JComboBox(Object[] items): 创建一个指定数组元素作为选项的组合框 JComboBox(Vector<?> items): 创建一个指定 Vector 中元素的组合框 进程条 进程条 (JprogressBar) 是以图形化的方式来描述任务进度的组件 在任务完成过程中, 进度条显示该任务完成的百分比, 百分比通常用可视化的矩形表示, 该矩形开始为空, 随着任务的执行, 组件被填满 进程条的继承关系如下 java.lang.object 256

17 +--java.awt.component +--java.awt.container +--javax.swing.jcomponent +--javax.swing.jprogressbar 第 13 章 Swing 用户界面设计 进程条的构建方法有以下几种 JProgressBar(): 创建一个显示矩形, 但不显示进度字符串的水平进度条 JProgressBar(BoundedRangeModel newmodel): 创建一个指定进度条数据模型的水平 进度条 JProgressBar(int orient): 创建一个指定方向 (VERTICAL 或 HORIZONTAL) 的进度条 JProgressBar(int min, int max): 创建一个指定最小值和最大值的水平进度条 JProgressBar(int orient, int min, int max): 创建一个指定方向 最小值和最大值的进度条 下面是一个使用 JprogressBar 的例子 // 文件 : 程序 13.5 JProgressBarDemo.java 描述 :JProgressBar 演示 // 导入需要使用的包和类 import javax.swing.*; public class JProgressBarDemo extends JFrame JProgressBar progress=new JProgressBar();// 创建, 并初始化 JProgressBar 类型 progress int count=0; // 声明整型变量 count // 创建内部类 Task, 设置滚动条的值 class Task extends java.util.timertask // 覆盖 TimerTask 的 run 方法 public void run() progress.setvalue(count++); // 执行的时候为 JProgressBar 赋值 // 声明 JProgressBarDemo 类的构造方法 public JProgressBarDemo() progress.setstringpainted(true); // 指定显示百分比 this.getcontentpane().add(progress,"north");// 获取内容面板, 并添加进度条 progress Task task=new Task(); // 创建, 并初始化 Task 对象 java.util.timer timer=new java.util.timer(); // 创建, 并初始化 Timer 对象 timer timer.schedule(task,100,100); // 安排指定时间执行, 重复执行任务 this.setsize(500,100); // 设置窗口的大小 this.setvisible(true); // 显示窗口 // 设置窗口关闭窗口, 自动隐藏并释放窗口 this.setdefaultcloseoperation(jframe.exit_on_close); public void excute() public static void main(string[ ] args) JProgressBarDemo p=new JProgressBarDemo();// 创建, 并初始化 JProgressBarDemo 对象 p 257

18 Java 从入门到精通 编写完程序后, 使用 javac 命令编译该文件产生 class 文件, 然后使用 java 命令运行该 class 文件, 运行结果如图 13-7 所示 图 13-7 JProgressBarDemo.java 运行结果 程序 13.5 中, 先创建了 JProgressBar 对象 progress, 程序通过 TimerTask 派生类 Task 完成 progress 的动态显示, 创建 Timer 对象 timer, 通过 timer 安排执行任务 Task 对象 表格 表格 (JTable) 是 Swing 新增加的组件, 主要是为了将数据以表格的形式显示 通常用数据模型类的对象来保存数据, 数据模型类派生于 AbstractTableModel 类, 并且必须重写抽象模型类的几个方法, 例如,getColumnCount getrowcount getcolumnname getvalueat 因为表格会从这个数据模型的对象中自动获取数据, 数据模型类的对象负责表格大小 ( 行 / 列 ) 数据填写 表格单元更新等与表格有关的属性和操作 表格类的继承关系如下 258 java.lang.object +--java.awt.component +--java.awt.container +--javax.swing.jcomponent +--javax.swing.jtabel 表格类的构造方法有以下几种 JTable(): 使用系统默认的模型创建一个 JTable 实例 JTable(int numrows,int numcolumns): 创建一个使用 DefaultTableModel 指定行 列的空表格 JTable(Object[][] rowdata,object[][] columnnames): 创建一个显示二维数据的表格 JTable(TableModel dm): 创建一个指定数据模式和默认字段模式的 JTable 实例 JTable(TableModel dm,tablecolumnmodel cm): 创建一个指定数据模式和字段模式的 JTable 实例 JTable(TableModel dm,tablecolumnmodel cm,listselectionmodel sm): 创建一个指定数据模式 字段模式与选择模式的 JTable 实例 JTable(Vector rowdata,vector columnnames): 创建一个以 Vector 为数据源, 并显示行名称的 JTable 实例 下面是一个 JTable 应用的例子 // 文件 : 程序 13.6 TableDemo.java 描述 :JTable 演示 // 导入需要使用的包和类 import javax.swing.jtable; import javax.swing.table.abstracttablemodel; import javax.swing.jscrollpane; import javax.swing.jframe;

19 第 13 章 Swing 用户界面设计 import javax.swing.joptionpane; import java.awt.*; import java.awt.event.*; public class TableDemo extends JFrame // 实现构造方法 public TableDemo() super("jtable 演示程序 "); // 调用父类构造方法 TableModel model = new TableModel(); //model 存放表格的数据 JTable table = new JTable(model); // 表格 table 从 model 中获取数据源 table.setpreferredscrollableviewportsize(new Dimension(400, 200));// 设置窗口的大小 JScrollPane scrollpane = new JScrollPane(table); // 声明一个滚动条面板 getcontentpane().add(scrollpane, BorderLayout.CENTER); // 滚动条面板加入窗口 addwindowlistener(new WindowAdapter() // 注册窗口监听器 public void windowclosing(windowevent e) System.exit(0); // 退出程序 ); class TableModel extends AbstractTableModel // 将列名保存与字符串数组 columnnames 中 final String[ ] columnnames = " 姓名 "," 学号 "," 年龄 "," 籍贯 "," 党员 "; // 将表格数据保存到 Object 数组 final Object[ ][ ] data = " 赵大元 ", "S ",new Integer(23), " 北京 ", new Boolean(false), " 李小乐 ", "S ",new Integer(22), " 天津 ", new Boolean(true), " 孙月 ", "S ",new Integer(23), " 上海 ", new Boolean(false), " 周元元 ", "S ",new Integer(23), " 重庆 ", new Boolean(true), " 刘涛 ", "S ",new Integer(24), " 浙江 ", new Boolean(false), " 杨光 ", "S ",new Integer(25), " 江西 ", new Boolean(true), ; // 获得列的数目 public int getcolumncount() return columnnames.length; // 返回列的数目 // 获得行的数目 public int getrowcount() return data.length; // 返回行的数目 // 获得某列的名字 public String getcolumnname(int col) return columnnames[col]; // 返回指定列的名字 // 获得某行某列的数据 public Object getvalueat(int row, int col) return data[row][col]; // 返回指定行 列的数据 // 获得指定列的类型 public Class getcolumnclass(int c) return getvalueat(0, c).getclass(); // 使得表格具有可编辑性 public boolean iscelleditable(int row, int col) // 返回指定列的类型 if (col < 2) // 当 col 小于 2 return false; // 返回 false 259

20 Java 从入门到精通 else // 当 col 大于等于 2 return true; // 返回 true // 使得该表格可以修改数据 public void setvalueat(object value, int row, int col) if (data[0][col] instanceof Integer &&!(value instanceof Integer)) // 判断数据类型 try data[row][col] = new Integer(value.toString()); // 设置 data[row][col] 的值 firetablecellupdated(row, col); // 更新指定行, 列数据 catch (NumberFormatException e) JOptionPane.showMessageDialog(TableDemo.this, // 显示报错对话框 "The\"" + getcolumnname(col) + "\" 本列只接受整型数据 "); else data[row][col] = value; // 设置 data[row][col] 的值 firetablecellupdated(row, col); // 更新指定行, 列数据 public static void main(string[ ] args) TableDemo frame = new TableDemo(); // 创建, 并初始化 TableDemo 对象 frame frame.pack(); // 调整窗口 frame.setvisible(true); // 显示窗口 编写完程序后, 使用 javac 命令编译该文件产生 class 文件, 然后使用 java 命令运行该 class 文件, 运行结果如图 13-8 所示 程序 13.6 中, 实现了继承 AbstractTableModel 的 MyTableModel 类, 该类声明字符串数组 columnnames 用于存放列的名称, 声明二维 Object 类型数组 data 用于保存数据 getcolumnclass 方法用于将最后一列的信息以复选框形式表现, 实现 iscelleditable 可以使表格具有可编辑功能,setValueAt 方法用于修改表格中的某项数据 图 13-8 TableDemo.java 运行结果 树 树 (JTree) 中特定的节点可以由 TreePath 标识或由其显示行标识 当展开某一个节点的所有祖先时, 将显示该节点, 折叠节点是隐藏位于折叠祖先下面的节点 可查看节点的父类节点都是可以展开的, 但是它们可以显示也可以不显示 显示节点必须是可查看的并且位于显示区域 与显示相关的方法如下 isrootvisible() // 返回树的根节点是否显示 260

21 setrootvisible() scrollpathtovisible() scrollrowtovisible() getvisiblerowcount() setvisiblerowcount() 与可查看相关的方法如下 isvisible() makevisible() 第 13 章 Swing 用户界面设计 // 设置是否显示树的根节点 // 确保展开所有的路径 // 按行滚动标识的条目, 直到显示出来 // 返回显示区域的显示行的数目 // 设置显示区域中显示行的数目 // 返回当前路径查看标识 // 设置当前路径的查看标识 树的构造方法有以下几种 JTree(): 创建一个空节点的树 JTree(Hashtable<?,?> value): 创建一个由 Hashtable 元素构成节点的 JTree, 它不显示根 JTree(Object[] value): 创建一个指定数组的元素作为不给显示的新的根节点的子节点的树实例 JTree(TreeModel newmodel): 创建一个使用指定数据模型, 并显示根节点的树实例 JTree(TreeNode root): 创建一个指定 TreeNode 作为其根, 并显示根节点的树实例 JTree(TreeNode root, boolean asksallowschildren): 创建一个指定 TreeNode 作为其根, 并指定根节点的显示方式的树实例 下面是一个使用 JTree 的实例 // 文件 : 程序 13.7 JTreeDemo.java 描述 :JTree 演示 // 导入需要使用的包和类 import java.awt.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.mouseadapter; import java.awt.event.mouseevent; import javax.swing.*; import javax.swing.event.treemodelevent; import javax.swing.event.treemodellistener; import javax.swing.tree.treenode; import javax.swing.tree.treepath; import javax.swing.tree.defaultmutabletreenode; import javax.swing.tree.defaulttreemodel; public class JTreeDemo implements ActionListener,TreeModelListener public static void main (String[] args) new JTreeDemo(); // 创建 JTreeDemo 对象 public JTreeDemo() DefaultTreeModel model = new DefaultTreeModel (MakeRootTree());// 创建一个树模型 tree = new JTree (model); // 再用树模型作为 JTree 的参数构一个树 tree.seteditable(true); // 设置树为可编辑状态 tree.addmouselistener(new MouseHandle()); // 为树添加监听器 MouseHandle treemodel=(defaulttreemodel)tree.getmodel(); // 返回正在提供数据的 TreeModel treemodel.addtreemodellistener(this); // 添加监听器 TreeModelEvent JFrame frame =new JFrame("JTree 应用演示 ");// 创建, 并初始化 JFrame 对象 frame 261

22 262 Java 从入门到精通 Container contentpane = frame.getcontentpane(); // 返回此窗体的 contentpane 对象 JScrollPane scrollpane = new JScrollPane(tree);// 创建一个显示 scrollpane 的 JScrollPane 对象 contentpane.add(scrollpane, "Center"); // 在内容面板中添加 scrollpane 于 Center 位置 InitPanel(); // 调用 InitPanel 方法 contentpane.add(panel,"south"); // 为 contentpane 添加面板 panel 于 South 位置 // 设置窗口关闭窗口, 自动隐藏并释放窗口 frame.setdefaultcloseoperation (JFrame.EXIT_ON_CLOSE); frame.setsize(250,300); // 设置窗口大小 frame.setvisible(true); // 显示窗口 // 声明, 实现 MakeRootTree 方法 public DefaultMutableTreeNode MakeRootTree() // 创建, 并初始化树数据结构中的通用节点 DefaultMutableTreeNode root = new DefaultMutableTreeNode ("Root"); DefaultMutableTreeNode child1 = new DefaultMutableTreeNode (" 第一层 "); DefaultMutableTreeNode child11 = new DefaultMutableTreeNode (" 第二层 "); DefaultMutableTreeNode child111 = new DefaultMutableTreeNode (" 第三层 "); root.add (child1); // 为 root 节点添加子节点 Child1 child1.add (child11); // 为 Child1 节点添加子节点 Child11 child11.add (child111); // 为 Child11 节点添加子节点 Child111 return root; // 返回根节点 public void InitPanel() panel = new JPanel(); // 初始化面板 panel addsibling = new JButton(" 添元素 "); // 初始化按钮对象 addsibling addchild = new JButton(" 添节点 "); // 初始化按钮对象 addchild delete = new JButton(" 删除点 "); // 初始化按钮对象 delete addsibling.addactionlistener(this); // 为按钮 addsibling 添加监听器 addchild.addactionlistener(this); // 为按钮 addchild 添加监听器 delete.addactionlistener(this); // 为按钮 delete 添加监听器 panel.add(addsibling); //panel 中添加 addsibling 按钮 panel.add(addchild); //panel 中添加 addchild 按钮 panel.add(delete); //panel 中添加 delete 按钮 public void actionperformed(actionevent event) // 获取选择的树形节点 DefaultMutableTreeNode selectednode = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); if (selectednode == null) // 判读选择的节点是否为 null return; if (event.getsource().equals(delete)) // 判断事件源是否是 delete if (selectednode.getparent()!= null) // 判断所选节点的父节点是否为 null treemodel.removenodefromparent(selectednode); // 移除所选节点 return; // 创建新的节点 DefaultMutableTreeNode newnode = new DefaultMutableTreeNode("New"); if (event.getsource().equals(addsibling)) // 判断事件源是否是添加兄弟节点 // 获取被选节点的父节点 DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectednode.getparent(); if (parent!= null)

23 第 13 章 Swing 用户界面设计 int selectedindex = parent.getindex(selectednode); // 在父节点中获取选择节点索引 // 将新建节点插入父节点下面的 selectedindex + 1 索引处 treemodel.insertnodeinto(newnode, parent, selectedindex + 1); else if (event.getsource().equals(addchild)) // 判断事件源是否是添加子节点 // 将新建节点插入父节点下面的 selectednode.getchildcount() 索引处 treemodel.insertnodeinto(newnode, selectednode, selectednode.getchildcount()); // 显示新的节点 TreeNode[ ] nodes = treemodel.getpathtoroot(newnode); // 向上构建节点的父节点 TreePath path = new TreePath(nodes); // 根据 TreeNode 的数组构造路径 tree.scrollpathtovisible(path); // 显示新节点 public void treenodeschanged(treemodelevent event) // 覆盖接口方法 treenodeschanged TreePath treepath=event.gettreepath(); // 返回已更改节点的父节点 // 返回指定索引位置的路径组件 DefaultMutableTreeNode node=(defaultmutabletreenode)treepath.getlastpathcomponent(); try int[ ] index=event.getchildindices(); // 返回子索引的值 node=(defaultmutabletreenode)node.getchildat(index[0]);// 返回子节点数组 index[0] 的子 节点 catch(nullpointerexception exc) // 捕获异常 System.out.println(nodeName+" 更改数据为 :"+(String)node.getUserObject()); // 输出字符 串信息 public void treenodesinserted(treemodelevent arg0) // 覆盖接口方法 treenodesinserted System.out.println(" 插入节点 "); // 输出字符串信息 public void treenodesremoved(treemodelevent arg0) // 覆盖接口方法 treenodesremoved System.out.println(" 删除节点 "); // 输出字符串信息 public void treestructurechanged(treemodelevent arg0) // 覆盖接口方法 treestructurechanged System.out.println(" 结构改变 "); // 输出字符信息 class MouseHandle extends MouseAdapter // 实现鼠标适配器的派生类 MouseHandle public void mousepressed(mouseevent e) try JTree tree=(jtree)e.getsource(); // 获取发生事件的对象 int rowlocation=tree.getrowforlocation(e.getx(),e.gety()); // 返回指定位置 处节点路径 if (rowlocation < 0 ) return; // 若 rowlocation 小于 0, 返回 TreePath treepath=tree.getpathforrow(rowlocation);// 返回指定行的路径 // 返回指定索引位置的路径组件 TreeNode treenode=(treenode)treepath.getlastpathcomponent(); nodename = treenode.tostring(); // 节点转化为字符串信息 catch(nullpointerexception ne) // 捕获异常 ne.printstacktrace(); // 输出异常信息 private JTree tree = null; // 声明 JTree 类型域 tree 263

24 Java 从入门到精通 private DefaultTreeModel treemodel = null; // 声明 DefaultTreeModel 类型域 treemodel private JPanel panel; // 声明 JPanel 类型域 panel private String nodename = null; // 声明 String 类型域 nodename private JButton addsibling; // 声明 JButton 类型域 addsibling private JButton addchild; // 声明 JButton 类型域 addchild private JButton delete; // 声明 JButton 类型域 delete 编写完程序后, 使用 javac 命令编译该文件产生 class 文件, 然后使用 java 命令运行该 class 文件, 运行结果如图 13-9 所示 程序 13.7 是一个比较复杂的程序, 通过 MakeRootTree 方法创建一棵树, 再通过该树创建 DefaultTreeModel 对象实 例 model, 然后通过 model 创建树实例 tree, 为 tree 添加鼠 标监听器 MouseListener, 通过 tree 的 getmodel 方法获取模型 treemodel, 为 treemodel 添加 TreeModelListener 监听器 13.5 盒布局管理器 图 13-9 JTreeDemo.java 运行结果 为了容器中的组件实现平台无关的自动排列,Swing 继续保持了 AWT 组件布局原理 Swing 也采用了布局管理器来管理 Swing 组件大小 位置布局, 但是在 AWT 基础上显示风格有所改进 Swing 也有顶层容器, 但不能将组件直接添加到顶层容器中, 而是添加到内容面板上 另外 Swing 新增了一个盒布局管理器 (BoxLayout), 下面将讨论盒布局管理器的使用 盒布局管理器是允许水平 (x 轴 ) 或者垂直 (y 轴 ) 顺序布局依次添加的组件的布局管理器 盒布局管理器通过参数指定布局类型 缺省情况下, 组件在纵轴方向上居中对齐 设置布局管理器的方法如下 264 pane.setlayout(new BoxLayout(pane,int axis)); axis 的取值有以下几种 X_AXIS: 水平方法布局组件 Y_AXIS: 垂直方法布局组件 LINE_AXIS: 组件的布局是根据容器的 ComponentOrientation 属性, 按照一行文字的排列方式放置组件 对于垂直方法的排列顺序, 组件总是先上后下放置 PAGE_AXIS: 组件的布局是根据容器的 ComponentOrientation 属性, 按照一页中的文本行排列方式布置组件 对于垂直方法的排列顺序, 组件总是先上后下放置 下面是一个盒布局管理器应用的例子 // 文件 : 程序 13.8 BoxLayoutDemo.java 描述 :BoxLayout 演示 // 导入需要使用的包和类 import java.awt.*; import javax.swing.*; public class BoxLayoutDemo

25 第 13 章 Swing 用户界面设计 public static void main(string[ ] args) JFrame f=new JFrame("BoxLayout 演示程序 "); // 创建, 并初始化窗口 f f.setbounds(80,60,300,230); // 移动组件并调整大小 f.setdefaultcloseoperation(jframe.dispose_on_close); // 窗口关闭, 自动隐藏并释放该窗体 int SIZE=3; // 声明, 并赋值整型变量 SIZE Container c =f.getcontentpane(); // 获取窗口内容面板 c.setlayout(new BorderLayout(30,30)); // 设置布局管理器 BorderLayout Box boxes[ ] = new Box[4]; // 创建, 并初始化 Box 数组 // 初始化数组 boxes[0]=box.createhorizontalbox(); // 创建一个从左到右显示 Box boxes[1]=box.createverticalbox(); // 创建一个从上到下显示 Box boxes[2]=box.createhorizontalbox(); // 创建一个从左到右显示 Box boxes[3]=box.createverticalbox(); // 创建一个从上到下显示 Box // 在 boxes[0] 对象中添加按钮组件 for(int i=0;i<size;i++) // 循环添加按钮对象 boxes[0] boxes[0].add(new JButton("boxes[0]["+i+"]")); // 在 boxes[1] 对象中添加按钮组件 for (int i=0;i<size;i++) // 循环添加按钮对象 boxes[1] boxes[1].add(new JButton("boxes[1]["+i+"]")); // 在 boxes[2] 对象中添加按钮组件 for (int i=0;i<size;i++) // 循环添加按钮对象 boxes[2] boxes[2].add(new JButton("boxes[2]["+i+"]")); // 在 boxes[3] 对象中添加按钮组件 for (int i=0;i<size;i++) // 循环添加按钮对象于 boxes[3] boxes[3].add(new JButton("boxes[3]["+i+"]")); c.add(boxes[0],borderlayout.north); // 在内容面板中添加 boxes[0] 在 NORTH 位置 c.add(boxes[1],borderlayout.east); // 在内容面板中添加 boxes[1] 在 EAST 位置 c.add(boxes[2],borderlayout.south); // 在内容面板中添加 boxes[2] 在 SOUTH 位置 c.add(boxes[3],borderlayout.west); // 在内容面板中添加 boxes[3] 在 WEST 位置 f.setvisible(true); // 显示窗口 图 BoxLayoutDemo.java 运行结果 编写完程序后, 使用 javac 命令编译该文件产生 class 文件, 然后使用 java 命令运行该 class 文件, 运行结果如图 所示 程序 13.8 中主要使用了 BoxLayout 布局管理器, 该程序创建并初始化 Box 数组, 为每一个元素添加 3 个按钮对象, 然后分别将 Box 数组元素添加于窗口的不同位置 13.6 案例 Swing 版 NoteBook 在上一章中, 已经编写了一个基于 AWT 的 NoteBook 程序 本章学习了 Swing 图形设计, 所以本节通过 Swing 实现记事本程序, 读者通过比较 思考会更容易掌握基础知识 265

26 Java 从入门到精通 域和构造方法 记事本类的域主要包括菜单栏 JMenuBar 主文本输入区 JTextArea 菜单 JMenu 菜单项 JMenuItem 以及文件对话框 FileDialog 等 NoteBook 的构造方法完成对域的初始化 组件位置安排和为组件添加事件监听器 266 JMenu filemenu = new JMenu(" 文件 "); // 创建, 并初始化菜单对象 filemenu JMenu editmenu = new JMenu(" 编辑 "); // 创建, 并初始化菜单对象 editmenu JMenuItem newitem = new JMenuItem(" 新建 "); // 创建, 并初始化菜单项对象 newitem JMenuItem openitem = new JMenuItem(" 打开 "); // 创建, 并初始化菜单项对象 openitem JMenuItem saveitem = new JMenuItem(" 保存 "); // 创建, 并初始化菜单项对象 saveitem JMenuItem saveasitem = new JMenuItem(" 另存 "); // 创建, 并初始化菜单项对象 saveasitem JMenuItem exititem = new JMenuItem(" 退出 "); // 创建, 并初始化菜单项对象 exititem JMenuItem selectitem = new JMenuItem(" 全选 "); // 创建, 并初始化菜单项对象 selectitem JMenuItem copyitem = new JMenuItem(" 复制 "); // 创建, 并初始化菜单项对象 copyitem JMenuItem cutitem = new JMenuItem(" 剪切 "); // 创建, 并初始化菜单项对象 cutitem JMenuItem pasteitem = new JMenuItem(" 粘贴 "); // 创建, 并初始化菜单项对象 pasteitem // 创建, 并初始化打开文件对话框 private FileDialog openfiledialog = new FileDialog(this, "Open File", FileDialog.LOAD); // 创建, 并初始化保存文件对话框 private FileDialog saveasfiledialog = new FileDialog(this,"Sava File As", FileDialog.SAVE); String filename = "NoName.txt"; // 设置默认的文件名 final JTextArea textarea=new JTextArea(); // 创建, 并初始化文本区 JMenuBar menubar = new JMenuBar(); // 创建, 并初始化菜单栏 String title="error MESSAGE"; // 创建, 并初始化字符串对象 int type=joptionpane.error_message; // 创建, 并初始化整型变量 public NoteBook() setsize(600, 400); // 设置窗口大小 setdefaultcloseoperation (JFrame.EXIT_ON_CLOSE); // 设置关闭窗口时, 释放窗口资源 JPanel panel=new JPanel(); // 创建, 并初始化面板对象 panel panel.setlayout(new GridLayout(1,1)); // 设置布局管理器 GridLayout panel.add(new JScrollPane(textArea)); // 为文本区添加滚动条 getcontentpane().add(panel); // 获取内容面板, 并给其添加面板 setjmenubar(menubar); // 为窗口设置菜单栏 menubar.add(filemenu); // 将文件菜单添加于菜单栏 menubar.add(editmenu); // 将编辑菜单添加于菜单栏 filemenu.add(newitem); // 将 新建 菜单项添加于 文件 菜单 filemenu.add(openitem); // 将 打开 菜单项添加于 文件 菜单 filemenu.addseparator(); // 添加分隔条与 文件 菜单 filemenu.add(saveitem); // 将 保存 菜单项添加于 文件 菜单 filemenu.add(saveasitem); // 将 另存 菜单项添加于 文件 菜单 filemenu.addseparator(); // 分隔条添加于 文件 菜单 filemenu.add(exititem); // 将 退出 菜单项添加于 文件 菜单 editmenu.add(selectitem); // 将 选择 菜单项添加于 编辑 菜单 editmenu.addseparator(); // 将分隔符添加于 编辑 菜单 editmenu.add(copyitem); // 将 复制 菜单项添加于 编辑 菜单 editmenu.add(cutitem); // 将 剪切 菜单项添加于 编辑 菜单 editmenu.add(pasteitem); // 将 粘贴 菜单项添加于 编辑 菜单 newitem.addactionlistener(this); //newitem 菜单项注册事件监听器 newitem.setmnemonic('n'); // 为 newitem 菜单项设置按钮 N 助记符

27 第 13 章 Swing 用户界面设计 newitem.setaccelerator( KeyStroke.getKeyStroke('N',java.awt.Event.CTRL_MASK,true)); // 设置加速器 openitem.addactionlistener(this); //openitem 菜单项注册事件监听器 openitem.setmnemonic('o'); // 为 newitem 菜单项设置按钮 O 助记符 openitem.setaccelerator(keystroke.getkeystroke('o',java.awt.event.ctrl_mask,true)); // 设置加速器 saveitem.addactionlistener(this); //newitem 菜单项注册事件监听器 saveitem.setmnemonic('s'); // 为 newitem 菜单项设置按钮 S 助记符 saveitem.setaccelerator(keystroke.getkeystroke('s',java.awt.event.ctrl_mask,true)); // 设置加速器 saveasitem.addactionlistener(this); //newitem 菜单项注册事件监听器 saveasitem.setmnemonic('t'); // 为 newitem 菜单项设置按钮 T 助记符 saveasitem.setaccelerator(keystroke.getkeystroke('t',java.awt.event.ctrl_mask,true)); // 设置加速器 exititem.addactionlistener(this); //newitem 菜单项注册事件监听器 exititem.setmnemonic('q'); // 为 newitem 菜单项设置按钮 Q 助记符 exititem.setaccelerator(keystroke.getkeystroke('q',java.awt.event.ctrl_mask,true)); // 设置加速器 selectitem.addactionlistener(this); //newitem 菜单项注册事件监听器 selectitem.setmnemonic('a'); // 为 newitem 菜单项设置按钮 A 助记符 selectitem.setaccelerator(keystroke.getkeystroke('a',java.awt.event.ctrl_mask,true)); // 设置加速器 copyitem.addactionlistener(this); //newitem 菜单项注册事件监听器 copyitem.setmnemonic('c'); // 为 newitem 菜单项设置按钮 C 助记符 copyitem.setaccelerator(keystroke.getkeystroke('c',java.awt.event.ctrl_mask,true)); // 设置加速器 cutitem.addactionlistener(this); //newitem 菜单项注册事件监听器 cutitem.setmnemonic('x'); // 为 newitem 菜单项设置按钮 X 助记符 cutitem.setaccelerator(keystroke.getkeystroke('x',java.awt.event.ctrl_mask,true)); // 设置加速器 pasteitem.addactionlistener(this); //newitem 菜单项注册事件监听器 pasteitem.setmnemonic('p'); // 为 newitem 菜单项设置按钮 P 助记符 pasteitem.setaccelerator(keystroke.getkeystroke('p',java.awt.event.ctrl_mask,true)); // 设置加速器 setvisible(true); // 显示窗口 构造方法主要作用就是初始化 布局组件对象 该构造方法先设置窗口的大小, 为窗口设置关闭窗口的默认操作, 设置布局管理器为 GridLayout, 获取窗口的容器面板, 为窗口设置菜单栏 menubar, 在菜单栏中添加菜单, 在菜单中添加菜单项, 最后为菜单项添加事件监听器, 并为其设置快捷键 事件处理方法 当用户为某个组件添加了一个事件监听器, 必须定义特定的事件处理方法 当相应的事件发生时, 就会调用该事件处理方法 public void actionperformed(actionevent e) Object eventsource = e.getsource(); if(eventsource == newitem) // 发生的事件源为 newitem 时 267

28 Java 从入门到精通 textarea.settext(""); // 新建时清空文本区 else if(eventsource == openitem) // 发生的事件源为 openitem 时 readfile(); // 调用 readfile 方法 else if(eventsource == saveitem) // 发生的事件源为 saveitem 时 filename = "NoName.txt"; // 设置文件名为 NoName.txt writefile(filename); // 调用 writefile else if(eventsource == saveasitem) // 发生的事件源为 saveasitem 时 filename=null; writefile(filename); // 调用 writefile else if(eventsource == selectitem) // 发生的事件源为 selectitem 时 textarea.selectall(); // 全选文本区文本内容 else if(eventsource == copyitem) // 发生的事件源为 copyitem 时 textarea.copy(); // 完成文本拷贝操作 else if(eventsource == cutitem) // 发生的事件源为 cutitem 时 textarea.cut(); // 完成文本剪切操作 else if(eventsource == pasteitem) // 发生的事件源为 pasteitem 时 textarea.paste(); // 完成文本粘贴 else if(eventsource == exititem) // 发生的事件源为 exititem 时 System.exit(0); // 退出程序 由于这个案例为菜单项添加了 ActionListener 接口, 所以必须定义方法 actionperformed actionperformed 方法的参数为 ActionEvent 的对象 e, 调用 e.getsource() 方法返回事件源, 程 序将会根据事件源做出相应的处理 文件操作 通过上面两节已经将记事本的界面和界面中组件的事件定义好了, 记事本应该具有一个最基本的文件方面的操作, 例如打开文件 读文件等 代码如下 268 // 读文件 public void readfile() JFileChooser openfile=new JFileChooser(); // 创建, 并初始化 JFileChooser 对象 openfile openfile.setdialogtitle(" 打开文件 "); // 设置对话框的标题 openfile.setapprovebuttontext(" 打开 "); // 设置 ApproveButton 的文本 openfile.showopendialog(this); // 弹出一个打开对话框 File file=openfile.getselectedfile(); // 返回选中的文件 if (file!= null) // 若 file 为 null FileInputStream inputfile=null; // 创建文件输出流对象 String message=" 文件不能找到 "; // 初始化字符串对象 message try inputfile=new FileInputStream(file); // 通过文件, 初始化 inputfile 对象 catch(filenotfoundexception fe) // 捕获异常 JOptionPane.showMessageDialog(this,message,title,type); // 显示对话框 int readbytes; // 声明整数类型变量 readbytes String message1=" 读文件发生错误 "; // 创建, 并初始化字符串对象 message1

29 第 13 章 Swing 用户界面设计 try while((readbytes=inputfile.read())!=-1) // 判断是否读完文件 textarea.append(string.valueof((char)readbytes)); // 追加到文本区 catch(ioexception ioe) // 捕获异常 JOptionPane.showMessageDialog(this,message1,title,type); // 显示对话框 String closemessage=" 关闭文件发生错误 "; // 创建, 并初始化字符串对象 closemessage try //try 语句块, 检查是否发生异常 inputfile.close(); // 关闭输入文件流 catch(ioexception ioe) // 捕获异常 JOptionPane.showMessageDialog(this,closemessage,title,type); // 显示对话框 // 写文件 public void writefile(string filename) File filesa; // 创建 File 对象 String messagef=" 文件未找到 "; // 创建, 并初始化字符串对象 messagf FileOutputStream outputfile=null; // 创建 FileOutputStream 对象 if(filename == null) JFileChooser savefile=new JFileChooser(); // 创建, 并初始化文件选择对象 savefile.setapprovebuttontext(" 保存 "); // 设置 ApproveButton 文本内容 savefile.setdialogtitle(" 保存文件 "); // 设置对话框标题 savefile.showsavedialog(this); // 显示保存对话框 filesa = savefile.getselectedfile(); // 返回选择的文件 if (filesa == null) return; else filesa = new File(fileName); // 创建新的文件 try outputfile=new FileOutputStream(filesa); // 创建, 并初始化文件输出流 catch(filenotfoundexception fe) // 捕获异常 JOptionPane.showMessageDialog(this,messagef,title,type); // 显示报错对话框 String filecontent=textarea.gettext(); // 获取文本区文本内容 String wrmessage=" 下文件错误 "; try outputfile.write(filecontent.getbytes()); // 进行写文件操作 catch(ioexception ioe) JOptionPane.showMessageDialog(this,wrmessage,title,type); // 显示信息对话框 String cmessage=" 关闭流发生错误 "; // 创建, 并初始化字符串对象 269

30 Java 从入门到精通 try outputfile.close(); // 关闭流 catch(ioexception ioe) // 捕获异常 JOptionPane.showMessageDialog(this,cmessage,title,type); // 显示信息对话框 主方法 本程序的主方法先实例化一个 NoteBook 对象, 代码如下 public static void main(string[ ] args) NoteBook NoteBook1 = new NoteBook(); 编写完程序后, 使用 javac 命令编译该文件产生 class 文件, 然后使用 java 命令运行该 class 文件, 运行结果如图 所示 图 NoteBook.java 运行结果程序 中,NoteBook 类继承了 JFrame 窗口类, 并实现 ActionListener 接口的 actionperformed 方法 该程序中的绝大部分功能主要体现于 JTextArea 类对象 textarea, JTextArea 提供文本的一些操作, 包括 selectall copy cut paste 方法 另外还实现了两个重要的方法, 包括 readfile 用于读取文件,writeFile 用于保存文件 13.7 小结 本章主要讨论了 Swing 的一些新内容, 不仅介绍了创建 Swing 程序的基本步骤, 而且还具体通过实例演示了 Swing 组件的使用 由于 Swing 提供庞大而复杂的类库, 如果想熟练地掌握和应用 Swing 组件, 还必须利用 API 的帮助, 逐步摸索规律, 掌握方法 270

Swing-02.pdf

Swing-02.pdf 2 J B u t t o n J T e x t F i e l d J L i s t B u t t o n T e x t F i e l d L i s t J F r a m e 21 2 2 Swing C a n v a s C o m p o n e n t J B u t t o n AWT // ToolbarFrame1.java // java.awt.button //

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes What is a JavaBean? JavaBean Java JavaBean Java JavaBean JComponent tooltiptext font background foreground doublebuffered border preferredsize minimumsize maximumsize JButton. Swing JButton JButton() JButton(String

More information

第1章

第1章 第 18 章 Swing 1 本章提要 18.1 前言 18.2 Swing 介紹 18.3 視窗元件 18.3.1 JFrame 18.3.2 Content Pane 18.3.3 Menu Bar 18.4 Swing 元件 18.4.1 JCheckBox JRadioButton JComboBox 18.4.2 JTextField JPasswordField 18.4.3 JTable

More information

Microsoft Word - Broker.doc

Microsoft Word - Broker.doc Broker 模式 采用 broker 模式对分布式计算进行简单模拟 系统在一个进程内模拟分布式环境, 因此不涉及网络编程和进程间通信,Broker 通过本地函数调用的方式实现 request 和 response 的转发 采用 broker 模式对分布式计算进行简单的模拟, 要求如下 : 设计四个 server, 一个 server 接收两个整数, 求和并返回结果, 一个 server 接收两个整数,

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes (Swing) AWTEvent Font LayoutManager 1 Classes in the javax.swing package Heavyweight FontMetrics Object Color Panel Applet JApplet Graphics Component Container Window Frame JFrame * Dialog JDialog JComponent

More information

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

利用Java技术编写桌面软件基础 利 用 Java 技 术 编 写 桌 面 软 件 基 础 在 学 习 Java 编 程 语 言 的 细 节 和 语 法 时, 我 们 会 碰 到 这 样 一 个 问 题 : 开 发 桌 面 应 用 软 件 需 要 使 用 哪 些 Java 技 术, 应 当 引 入 哪 些 package? 这 一 问 题 的 答 案 取 决 于 开 发 的 应 用 软 件 类 型 和 它 的 作 用 这 篇 文 章

More information

<4D F736F F F696E74202D C DB5DA3132D5C25FCDBCD0CED3C3BBA7BDE7C3E6BBF9B4A12E BBCE6C8DDC4A3CABD5D>

<4D F736F F F696E74202D C DB5DA3132D5C25FCDBCD0CED3C3BBA7BDE7C3E6BBF9B4A12E BBCE6C8DDC4A3CABD5D> 第 12 章图形用户界面基础 1 动因 为 Java GUI 程序设计而设计的 API 是如何应用面向对象 原则的绝佳范例 从本章开始将学习 Java GUI API 的框 架结构, 还要学习如何使用 GUI 组件为应用程序和 applet 开发用户友好接口 2 学习目标 区分 Swing 和 AWT 的不同 ( 第 12.2 节 ) 描述 Java GUI API 的层次体系结构 ( 第 12.3

More information

PowerPoint 簡報

PowerPoint 簡報 Paint 繪圖板 JAVA 程式設計 指導老師 : 鄞宗賢 組員 : 4A3G0901 劉彥佐 4A3G0907 韓偉志 畫面預覽 匯入參數 package paint; import java.awt.*; import java.awt.event.*; import javax.swing.*; 主程式 public class paint{ public static void main(string[]

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 按钮对象 (button) 当 JavaScript 读到 标记中的 type 属性值为 button 时, 自动建立一个按钮对象, 并将该对象放到表单对象的 elements 数组当中 按钮对象包括 : 普通按钮 (button) 提交按钮 (submit) 重置按钮 (reset) 1. 使用按钮对象的格式 document.forms[ 索引值 ].elements[ 索引值

More information

Microsoft Word - 投影片ch23

Microsoft Word - 投影片ch23 Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第二十三章認識 Swing 本章學習目標 Swing 概述認識 JFrame 類別學習 Swing 的基本物件學習 Swing 物件之間的互動 認識 Swing 23-2 23.1 Swing 概述 Swing 提供了豐富的物件 更美觀的圖形介面, 以及更高的執行效率 幾乎每一個 AWT 物件都有一個相對應的 Swing

More information

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

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

Mac Java import com.apple.mrj.*;... public class MyFirstApp extends JFrame implements ActionListener, MRJAboutHandler, MRJQuitHandler {... public MyFirstApp() {... MRJApplicationUtils.registerAboutHandler(this);

More information

(CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787

(CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787 Web (CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787 1092 1/ 16 30.75 748 2005 1 1 2005 1 1 : 1 3 100

More information

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

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

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

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

java2d-4.PDF

java2d-4.PDF 75 7 6 G r a d i e n t P a i n t B a s i c S t r o k e s e t P a i n t ( ) s e t S t o r k e ( ) import java.awt.*; import java.awt.geom.*; public class PaintingAndStroking extends ApplicationFrame { public

More information

<4D F736F F F696E74202D20B5DA37D5C2204A617661B5C4CDBCD0CED3EBD3C3BBA7BDE7C3E62E BBCE6C8DDC4A3CABD5D>

<4D F736F F F696E74202D20B5DA37D5C2204A617661B5C4CDBCD0CED3EBD3C3BBA7BDE7C3E62E BBCE6C8DDC4A3CABD5D> 第 7 章 Java 的图形与用户界面 7.1 概述 7.2 底层容器类 JFrame 和 JApplet 7.3 容器的布局 74 7.4 字体和颜色的使用 7.1 概述 利用 Java 中的图形 图像和重要的图形界面组件 (Componet) p 可以实现不同外观要求的窗口 图形和交互方式 1.java.awt awt 包 AWT 是抽象窗口工具集 Abstract Window Toolkit

More information

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

LEFT, RIGHT // 左 // 右 (2) 当图片移动后, 按钮的坐标发生改变, 此操作通过 setloca tion() 方法实现 setlocation() 方法是从 Component 类继承的, 其定义如下 : public void setlocation(int x, int y 拼图游戏 任务说明 本实例实现了拼图游戏的开发 运行程序, 单击 开始 按钮将打乱图片的位置, 效果如图 1 所示, 然后通过鼠标单击图片进行移动, 直到将所有图片都移动到正确位置, 游戏过关, 过关后的效果如图 2 所示 图 1 打乱图片位置的效果图 2 图片移动到正确位置的效果 关键技术 本程序主要通过 Swing 与枚举类实现, 程序将一幅完整的图片平均分成 9 部分, 每一部分为一个正方形,

More information

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

1.3 最终效果图 : 2 内部布局代码 2.1 按键按钮代码 // 初始化计算器上键的按钮, 将键放在一个画板内 JPanel keypanel = new JPanel(); // 用网格布局器,4 行,5 列的网格, 网格之间的水平方向间隔为 3 个象素, 垂直方向间隔为 3 个象素 keyp 计算器 1. 计算器上的键的显示名字 1.0 继承 JFrame 类 public class Calculate extends JFrame { 1.1 定义常量 计算器上的键的显示名字 public final String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*", "%", "1", "2", "3", "-", "1/x",

More information

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

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题 2009 年 3 月 全 国 计 算 机 等 级 考 试 笔 试 试 卷 二 级 Java 语 言 程 序 设 计 ( 考 试 时 间 90 分 钟, 满 分 100 分 ) 一 选 择 题 ( 每 题 2 分, 共 70 分 ) 下 列 各 题 A) B) C) D) 四 个 选 项 中, 只 有 一 个 选 项 是 正 确 的 请 将 正 确 选 项 填 涂 在 答 题 卡 相 应 位 置 上,

More information

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

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

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

授课内容 内容 图形界面与控制台应用的区别 (Console Application) 第 6 章图形用户界面图形用户界面 (Graphical User Interface,GUI), 使用图形方式借助菜单 按钮等标准界面元素和键盘 鼠标操作, 实现人机交互 内容和要求 : 掌握 Java Swi 金陵科技学院教案 第 9 10 11 次课授课学时 6 教案完成时间 : 2014.2 章 节 第六章图形用户界面 6-1 AWT 组件及其属性类 6-2 事件处理 6-3 Swing 组件及事件 6-4 图形图像 ( 以自学为主 ) 1. AWT 组件及其属性类 主要内容 2. 事件处理 3. Swing 组件及事件 4. 图形图像 目的与要求 1. 掌握 Java Swing 组件的使用方法,

More information

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

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

chp9.ppt

chp9.ppt Java 软件设计基础 高级 GUI 设计与多媒体技术 1. 布局设计 布局概述 java.awt FlowLayout BorderLayout CardLayout GridLayout GridBagLayout java.swing BoxLayout ScrollPanelLayout ViewportLayout OverLayout FlowLayout 布局策略 将容器的组件按照加入的先后顺序从左至右依次排列,

More information

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464>

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464> 第 1 章 进入 Photoshop 的全新世界 本章导读 Photoshop 1 1.1 Photoshop CS6 Photoshop Photoshop 1.1.1 Photoshop POP 1-1 图 1-1 平面广告效果 1.1.2 Photoshop 1-2 Photoshop CS6 Photoshop CS6 Photoshop CS6 Extended 3D 3 Photoshop

More information

ZW1.PDF

ZW1.PDF C. A. R. Hoare, The Emperor s Old Clothes Java C++ Objective C Eiffel Smalltalk Mesa Lisp Java Java Java C++ Java 10 Item 1 Item 2 String.equals() == 1 1 Item 3 Java C++ Java Item 4 Java Item 5 Java Item

More information

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

基于CDIO一体化理念的课程教学大纲设计 Java 语 言 程 序 设 计 课 程 教 学 大 纲 Java 语 言 程 序 设 计 课 程 教 学 大 纲 一 课 程 基 本 信 息 1. 课 程 代 码 :52001CC022 2. 课 程 名 称 :Java 语 言 程 序 设 计 3. 课 程 英 文 名 称 :Java Programming 4. 课 程 类 别 : 理 论 课 ( 含 实 验 上 机 或 实 践 ) 5. 授

More information

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

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, http://debut.cis.nctu.edu.tw/~chi Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, : POSITIVE_INFINITY NEGATIVE_INFINITY

More information

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

图形学 Project 2 要求 任意两个多边形, 求出其相交的区域 使用说明 例 1 第一步, 与 Project 1 画多边形的方法相同, 画一个多边形 ; 第二步, 单击 INTERSECT WITH, 随后画出第二个多边形 ; 第三步, 单击 FILL 进行填充 图形学 Project 2 要求 任意两个多边形, 求出其相交的区域 使用说明 例 1 第一步, 与 Project 1 画多边形的方法相同, 画一个多边形 ; 第二步, 单击 INTERSECT WITH, 随后画出第二个多边形 ; 第三步, 单击 FILL 进行填充 例 2 单击 CLEAR, 重新回到初始状态, 下面让我们看一下自交多边形的情况 当单击数次后, 出现左图的情况, 之后我们单击

More information

JavaIO.PDF

JavaIO.PDF O u t p u t S t ream j a v a. i o. O u t p u t S t r e a m w r i t e () f l u s h () c l o s e () public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException

More information

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple halcon 与 C# 混合编程之 Halcon 代码调用 写在前面 完成 halcon 与 C# 混合编程的环境配置后, 进行界面布局设计构思每一个按钮所需要实现 的功能, 将 Halcon 导出的代码复制至相应的 C# 模块下即可 halcon 源程序 : dev_open_window(0, 0, 512, 512, 'black', WindowHandle) read_image (Image,

More information

软件工程文档编制

软件工程文档编制 实训抽象类 一 实训目标 掌握抽象类的定义 使用 掌握运行时多态 二 知识点 抽象类的语法格式如下 : public abstract class ClassName abstract void 方法名称 ( 参数 ); // 非抽象方法的实现代码 在使用抽象类时需要注意如下几点 : 1 抽象类不能被实例化, 实例化的工作应该交由它的子类来完成 2 抽象方法必须由子类来进行重写 3 只要包含一个抽象方法的抽象类,

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Fortran Algol Pascal Modula-2 BCPL C Simula SmallTalk C++ Ada Java C# C Fortran 5.1 message A B 5.2 1 class Vehicle subclass Car object mycar public class Vehicle extends Object{ public int WheelNum

More information

Microsoft Word - 新1-12.doc

Microsoft Word - 新1-12.doc 实训 5 面向对象编程练习 实训 5 面向对象编程练习 5.1 实训目的 通过编程和上机实验理解 Java 语言是如何体现面向对象编程基本思想 以及如何创建类 和对象 了解成员变量和成员方法的特性 5.2 实训要求 编写一个体现面向对象思想的程序 编写一个创建对象和使用对象的方法的程序 5.3 实训内容 5.3.1 创建对象并使用对象 1 定义一个 Person 类 可以在应用程序中使用该类 成员属性

More information

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

Microsoft Word - Java程序设计全文_终_.doc 实训 20 综合开发 2: 文本编辑器 20.1 实训目的 通过采用 Netbeans 重新开发并完善实训 15 中的文本编辑器程序, 训练读者掌握使用 Netbeans 进行 AWT GUI 程序的综合开发技能 20.2 实训案例 下面介绍如何采用 Netbeans 重新开发并完善实训 15 中的文本编辑器程序 通过本实训, 读者能够掌握 : (1)GUI 的菜单设计 (2)GUI 国际化处理 (3)GUI

More information

Microsoft Word - CX1000-HMI_程序开发_PLC通讯

Microsoft Word - CX1000-HMI_程序开发_PLC通讯 用 VB.Net 开发 CX1000 的 HMI 第二部分和 TwinCAT PLC 通讯 一 TwinCAT 动态库 TwinCAT.Ads.dll The TwinCAT.Ads.dll 是一个.NET 类库, 它提供和 ADS 设备通讯的类 如果 TwinCAT PLC 运行在 IPC 上, 则需要添加的类库是路径 \TwinCAT\ADS Api\.NET\v1.1.4322 下的 TwinCAT.Ads.dll

More information

D C 93 2

D C 93 2 D9223468 3C 93 2 Java Java -- Java UML Java API UML MVC Eclipse API JavadocUML Omendo PSPPersonal Software Programming [6] 56 8 2587 56% Java 1 epaper(2005 ) Java C C (function) C (reusability) eat(chess1,

More information

Java事件处理模型

Java事件处理模型 Java 事件处理模型 北京理工大学计算机学院 金旭亮 事件驱动 的软件系统 面向对象的软件系统许多是 事件驱动 的, 通常定义了一系列的事件, 并且事先规定好这些事件发生时应该如何响应 由于事件的发生通常是离散的, 所以 事件驱动 的软件系统并没有一个固定的执行流程 Java 的 GUI 应用程序也是 事件驱动 的 2014/11/17 金旭亮 Java 编程系列 (2014 版 ) 2 Java

More information

Microsoft PowerPoint - course8.ppt

Microsoft PowerPoint - course8.ppt 回顧 Java 程式設計基礎班 (8) Java Data Structure 劉根豪台大電機所網路資料庫研究室 Email: kenliu@arbor.ee.ntu.edu.tw 1 2 Java AWT package Java Swing package Component: 一些 GUI 元件, 如 :Button Label 等 Container: 用來放置 GUI 元件的地方 Container

More information

幻灯片 1

幻灯片 1 图形界面程序设计 计算机信息系 课程引入说课提纲 案例 体验 双击运行 FiveMain.jar 文件, 和同桌一起体验下这个五子棋游戏, 并观察下这个游戏有哪些部分组成? 课程引入说课提纲 提出 问题 这个五子棋游戏和我们前几章完成的 学生综合素质评测系统 最大的区别是什么? 有什么优点或缺点吗? 1 图形用户界面是什么? 2 怎么用图形用户界面开发? 课程引入说课提纲 任务 任务名称 总任务 :

More information

Topic

Topic 二 级 JAVA 上 机 试 题 汇 编 第 01 套 : 1. 基 本 操 作 (1 小 题, 计 30 分 ) 在 考 生 文 件 夹 中 存 有 文 件 名 为 Java_1.java 的 文 件, 该 程 序 是 不 完 整 的, 请 在 注 释 行 //**********Found********** 下 一 行 语 句 的 下 划 线 地 方 填 入 正 确 内 容, 然 后 删 除

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

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

res/layout 目录下的 main.xml 源码 : <?xml version=1.0 encoding=utf 8?> <TabHost android:layout_height=fill_parent xml 拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

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

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 本章学习目标 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 配置视图解析器 @RequestMapping 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 和 Struts2 都属于表现层的框架, 它是 Spring 框架的一部分, 我们可 以从 Spring 的整体结构中看得出来 :

More information

Microsoft Word - 正文.doc

Microsoft Word - 正文.doc 第一部分基本实验 31 contentpane.add(p); setjmenubar(mb); // 将菜单项注册给事件监听者 File_Open.addActionListener(this); File_Close.addActionListener(this); File_Exit.addActionListener(this); Edit_Copy.addActionListener(this);

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

基于JAVA的连连看游戏设计

基于JAVA的连连看游戏设计 基 于 JAVA 的 连 连 看 游 戏 设 计 摘 要 :1978 年 第 一 款 PC 游 戏 冒 险 岛 在 美 国 问 世 至 今, 随 着 硬 件 和 软 件 水 平 的 不 断 进 步, 出 现 许 许 多 多 的 游 戏, 其 中 连 连 看 就 非 常 经 典 连 连 看 -- 在 一 个 画 好 的 格 局 内, 排 列 着 一 些 不 同 的 图 片, 选 中 两 张 一 样 的

More information

javaexample-02.pdf

javaexample-02.pdf n e w. s t a t i c s t a t i c 3 1 3 2 p u b l i c p r i v a t e p r o t e c t e d j a v a. l a n g. O b j e c t O b j e c t Rect R e c t x 1 y 1 x 2 y 2 R e c t t o S t r i n g ( ) j a v a. l a n g. O

More information

Microsoft PowerPoint - ch02

Microsoft PowerPoint - ch02 第 一 篇 基 礎 圖 文 動 畫 (Basic Graphics / Animation) 2 1 簡 介 2 2 Frame Class 2 3 執 行 緒 繪 圖 流 程 2 4 Font Class 2 5 Color Class 2 6 中 文 處 理 2 7 習 題 (Exercises) 第 二 章 文 字 繪 製 (Words) 2 1 簡 介 本 書 探 討 的 是 動 畫 遊 戲,

More information

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

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 1Z0-854 Title : Java Standard Edition 5 Programmer Certified Professional Upgrade Exam Version : Demo 1 / 12 1.Given: 20. public class CreditCard

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 语 言 程 序 设 计 郑 莉 胡 家 威 编 著 清 华 大 学 逸 夫 图 书 馆 北 京 内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 握 语

More information

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

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj Message Transition 5-1 5-2 DataInputStream Class 5-3 DataOutputStream Class 5-4 PrintStream Class 5-5 (Message Transition) (Exercises) Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream

More information

(京)新登字063号

(京)新登字063号 教 育 部 职 业 教 育 与 成 人 教 育 司 推 荐 教 材 Java 程 序 设 计 教 程 ( 第 二 版 ) 沈 大 林 主 编 沈 昕 肖 柠 朴 曾 昊 等 编 著 内 容 简 介 Java 是 由 美 国 SUN 公 司 开 发 的 一 种 功 能 强 大 的, 具 有 简 单 面 向 对 象 分 布 式 可 移 植 等 性 能 的 多 线 程 动 态 计 算 机 编 程 语 言

More information

untitled

untitled 1 行 行 行 行.NET 行 行 類 來 行 行 Thread 類 行 System.Threading 來 類 Thread 類 (1) public Thread(ThreadStart start ); Name 行 IsAlive 行 行狀 Start 行 行 Suspend 行 Resume 行 行 Thread 類 (2) Sleep 行 CurrentThread 行 ThreadStart

More information

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

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-055Big5 Title : Sun Certified Programmer for the Java 2 Platform.SE 5.0 Version : Demo 1 / 22 1. 11. public static void parse(string str)

More information

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

基于ECO的UML模型驱动的数据库应用开发1.doc ECO UML () Object RDBMS Mapping.Net Framework Java C# RAD DataSetOleDbConnection DataGrod RAD Client/Server RAD RAD DataReader["Spell"].ToString() AObj.XXX bug sql UML OR Mapping RAD Lazy load round trip

More information

Learning Java

Learning Java Java Introduction to Java Programming (Third Edition) Prentice-Hall,Inc. Y.Daniel Liang 2001 Java 2002.2 Java2 2001.10 Java2 Philip Heller & Simon Roberts 1999.4 Java2 2001.3 Java2 21 2002.4 Java UML 2002.10

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074> 程 序 设 计 实 习 INFO130048 3-2.C++ 面 向 对 象 程 序 设 计 重 载 继 承 多 态 和 聚 合 复 旦 大 学 计 算 机 科 学 与 工 程 系 彭 鑫 pengxin@fudan.edu.cn 内 容 摘 要 方 法 重 载 类 的 继 承 对 象 引 用 和 拷 贝 构 造 函 数 虚 函 数 和 多 态 性 类 的 聚 集 复 旦 大 学 计 算 机 科 学

More information

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 JAVA 程 序 设 计 ( 肆 ) 徐 东 / 数 学 系 使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 使 用 Java class 代 表 保 险 箱 public class SaveBox 类 名 类 类 体 实 现 封 装 性 使 用 class SaveBox 代 表 保

More information

[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];

[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]; Introduction to Programming (II) Spring 2008, Final Exam Name: ID Number: [True/False:] (5 points each) If your answer is "false", you have to provide correct reasons. Otherwise, no points will be given.

More information

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

Photoshop CS6 艺术设计案例教程 ( 第二版 ) 1.1 Photoshop 的应用领域 Photoshop,,, Photoshop Photoshop 的用途 Photoshop CIS ( ) ( ) 案例展现 ~ 1 Chapter 01 Photoshop CS6 的基本操作 本章内容 1.1 Photoshop 的应用领域 1.6 控制面板的显示与隐藏 1.2 位图和矢量图的特性 1.7 新建 打开与保存文件 1.3 像素和分辨率的关系 1.8 图像的缩放 1.4 色彩模式 1.9 屏幕显示模式 1.5 Photoshop CS6 界面 1.10 计算机图形图像常用的色彩模式 Photoshop CS6 艺术设计案例教程

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6: Chapter 15. Suppressed Exception CH14 Finally Block Java SE 7 try-with-resources JVM cleanup try-with-resources JVM cleanup cleanup Java SE 7 Throwable getsuppressed Throwable[] getsuppressed() Suppressed

More information

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

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

untitled

untitled 1 Outline 料 類 說 Tang, Shih-Hsuan 2006/07/26 ~ 2006/09/02 六 PM 7:00 ~ 9:30 聯 ives.net@gmail.com www.csie.ntu.edu.tw/~r93057/aspnet134 度 C# 力 度 C# Web SQL 料 DataGrid DataList 參 ASP.NET 1.0 C# 例 ASP.NET 立

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt Java 程式設計基礎班 (8) 莊坤達台大電信所網路資料庫研究室 Email: doug@arbor.ee.ntu.edu.tw Class 8 1 回顧 Java Data Structure Class 8 2 Java AWT package Component: 一些 GUI 元件, 如 : Button Label 等 Container: 用來放置 GUI 元件的地方 Container

More information

可 Web 编程的NativeUI 设计与实现

可 Web 编程的NativeUI  设计与实现 可 Web 编程的 NativeUI 设计与实现 张袁炜 zhangyuanwei@baidu.com 欢迎转岗简历请发 About Me @ 张袁炜 直达号 网址导航 百度 音乐 前端 Node.js Android Arduino RaspberryPI https://github.com/zhangyuanwei Outline 一个 Hybrid App 的进化史 Native UI 实现原理

More information

Microsoft Word - 正文.doc

Microsoft Word - 正文.doc 第 7 章 Java 中的 GUI 编程 图形用户界面 (Graphical User Interface,GUI) 使用图形的方式, 借助菜单 按钮等标准界面元素和鼠标操作, 帮助用户方便地向计算机系统发送指令, 启动操作, 并将系统运行的结果同样以图形方式显示给用户 图形用户界面操作简单, 省去了字符界面用户必须记忆各种命令的麻烦, 深受广大用户的喜爱和欢迎 所以学习设计和开发图形用户界面, 是应用软件开发人员的必修课

More information

图形用户界面 (GUI) 设计

图形用户界面 (GUI) 设计 2013-2014 学年度第二学期课程 C 语言程序设计 Java 语言程序设计面向过程编程方法 编程方法学 新疆农业大学计算机与信息工程学院 陈燕红 :cyh@xjau.edu.cn 图形用户界面 (GUI) 设计 参考 C:\Program Files\Java\jdk1.6.0_10\demo 教学内容 1 Java 图形用户界面设计概述 2 3 4 AWT 组件集 事件处理 Swing

More information

使用MapReduce读取XML文件

使用MapReduce读取XML文件 使用 MapReduce 读取 XML 文件 XML( 可扩展标记语言, 英语 :extensible Markup Language, 简称 : XML) 是一种标记语言, 也是行业标准数据交换交换格式, 它很适合在系统之间进行数据存储和交换 ( 话说 Hadoop H ive 等的配置文件就是 XML 格式的 ) 本文将介绍如何使用 MapReduce 来读取 XML 文件 但是 Had oop

More information

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO CHAPTER 使用 Hadoop 打造自己的雲 8 8.3 測試 Hadoop 雲端系統 4 Nodes Hadoop Map Reduce Hadoop WordCount 4 Nodes Hadoop Map/Reduce $HADOOP_HOME /home/ hadoop/hadoop-0.20.2 wordcount echo $ mkdir wordcount $ cd wordcount

More information

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

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class - Table.class

More information

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

全国计算机技术与软件专业技术资格(水平)考试 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 2008 年 上 半 年 程 序 员 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 ) 试 题 一 ( 共 15 分 ) 阅 读 以 下 说 明 和 流 程 图, 填 补 流 程 图 中 的 空 缺 (1)~(9), 将 解 答 填 入 答 题 纸 的 对 应 栏 内 [ 说 明

More information

chp11.ppt

chp11.ppt Java 软 件 设 计 基 础 Applet 程 序 1.Applet 概 念 Applet 与 Application Application 是 能 独 立 运 行 的 程 序 单 位 ; Applet 程 序 不 能 独 立 运 行, 必 须 依 附 在 网 页 上, 借 助 于 浏 览 器 才 能 运 行 通 常 置 于 服 务 器 端, 当 用 户 连 接 到 该 网 页,Applet

More information

untitled

untitled 4.1AOP AOP Aspect-oriented programming AOP 來說 AOP 令 理 Cross-cutting concerns Aspect Weave 理 Spring AOP 來 AOP 念 4.1.1 理 AOP AOP 見 例 來 例 錄 Logging 錄 便 來 例 行 留 錄 import java.util.logging.*; public class HelloSpeaker

More information

Microsoft Word - 正文.doc

Microsoft Word - 正文.doc 单元七 Java GUI 应用程序开发 1.AWT 及其图形界面组件 2.AWT 布局管理器 3.AWT 事件处理机制 案例 7-1 登录窗口 登录窗口是很多应用系统中不可缺少的组成部分 通过验证用户输入的用户名和密码, 决定是否允许用户进入系统, 在一定程度上保证系统的安全 本案例设计一个登录窗口, 运行 界面如图 7-1 所示 图 7-1 案例 7-1 登录窗口 众所周知, 拥有图形用户界面的计算机应用程序生动

More information

2009年9月全国计算机等级考试二级Java真题及答案

2009年9月全国计算机等级考试二级Java真题及答案 2009 年 9 月 全 国 计 算 机 等 级 考 试 二 级 Java 真 题 及 答 案 [ 录 入 者 :NCRE100 时 间 :2009-10-08 19:41:34 作 者 : 来 源 :NCRE100.com 浏 览 :1421 次 ] 2009 年 9 月 全 国 计 算 机 等 级 考 试 二 级 笔 试 试 卷 Java 语 言 程 序 设 计 ( 考 试 时 间 90 分 钟,

More information

untitled

untitled 1 .NET 利 [] [] 來 說 切 切 理 [] [ ] 來 說 拉 類 類 [] [ ] 列 連 Web 行流 來 了 不 不 不 流 立 行 Page 類 Load 理 Response 類 Write 料 Redirect URL Response.Write("!! ives!!"); Response.Redirect("WebForm2.aspx"); (1) (2) Web Form

More information

《大话设计模式》第一章

《大话设计模式》第一章 第 1 章 代 码 无 错 就 是 优? 简 单 工 厂 模 式 1.1 面 试 受 挫 小 菜 今 年 计 算 机 专 业 大 四 了, 学 了 不 少 软 件 开 发 方 面 的 东 西, 也 学 着 编 了 些 小 程 序, 踌 躇 满 志, 一 心 要 找 一 个 好 单 位 当 投 递 了 无 数 份 简 历 后, 终 于 收 到 了 一 个 单 位 的 面 试 通 知, 小 菜 欣 喜

More information

PowerPoint Presentation

PowerPoint Presentation Visual Basic 2005 學 習 範 本 第 7 章 陣 列 的 活 用 7-1 陣 列 當 我 們 需 要 處 理 資 料 時, 都 使 用 變 數 來 存 放 資 料 因 為 一 個 變 數 只 能 代 表 一 個 資 料, 若 需 要 處 理 100 位 同 學 的 成 績 時, 便 要 使 用 100 個 不 同 的 變 數 名 稱, 這 不 但 會 增 加 變 數 名 稱 命 名

More information

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/ 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:// 不能以数字开头 D._3_ B:// 不能用点和空格 提问 抢答 E.$anothervar C: // 不能用点和空格

More information

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

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

More information

untitled

untitled 1 MessageBox 類 MessageBox 類 Show Show (,,, ); Show (string, string, MessageBoxButtons, MessageBoxIcon) MessageBox 類 列 數 MessageBoxButtons.OK MessageBoxButtons.OKCancel MessageBoxButtons.AbortRetryIgnore

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

拦截器(Interceptor)的学习

拦截器(Interceptor)的学习 二 拦截器 (Interceptor) 的学习 拦截器可以监听程序的一个或所有方法 拦截器对方法调用流提供了细粒度控制 可以在无状态会话 bean 有状态会话 bean 和消息驱动 bean 上使用它们 拦截器可以是同一 bean 类中的方法或是一个外部类 下面介绍如何在 Session Bean 类中使用外部拦截器类 @Interceptors 注释指定一个或多个在外部类中定义的拦截器 下面拦截器

More information

untitled

untitled 3 C++ 3.1 3.2 3.3 3.4 new delete 3.5 this 3.6 3.7 3.1 3.1 class struct union struct union C class C++ C++ 3.1 3.1 #include struct STRING { typedef char *CHARPTR; // CHARPTR s; // int strlen(

More information

epub83-1

epub83-1 C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C

More information

untitled

untitled OGRE http://antsam.blogone.net AntsamCGD@hotmail.com OGRE OGRE listener listener target listener target Dispatcher Processor Input Reader Event class view Event Class view Input Event ctrlaltshift ascoll

More information

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

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

More information