




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在 Java1 0 中 已经有一个用于 GUI 编程的类库 AWT 称之为抽象窗口工具箱 遗憾 的是 AWT 中的组件 例如按钮 类名为 Button 在实现中使用了本地代码 Native Code 这些组件的创建和行为是由应用程序所在平台上的本地 GUI 工具来处理的 因此 AWT 组 件要在不同的平台上提供给用户一致的行为就受到了很大的限制 同时 AWT 组件中还存 在很多 bug 这就使得使用 AWT 来开发跨平台的 GUI 应用程序困难重重 1996 年 SUN 公司和 Netsacpe 公司在一个称为 Swing 的项目中合作完善了 Netsacpe 公司原来开发的一套 GUI 库 也就是现在所谓的 Swing 组件 Swing 组件和原来的 AWT 组 件完全不同 最大的区别就是 Swing 组件的实现中没有使用本地代码 这样对底层平台的 依赖型就大为降低 并且可以给不同平台的用户一致的感觉 此外 和原来的 AWT 相比 Swing 中提供了内容更多 使用更为方便的组件 在阅读一些书籍时 常会遇到名词 JFC Java Foundation Class JFC 的概念是在 1997 年的 JavaOne 开发者大会上首次提出的 是指用于构建 GUI 的一组 API 实际上 Swing 只是 JFC 的一部分 其它的还有二维图形 Java 2D API 以及拖放 Drag and Drop API 等等 Swing 并不是完全取代了 AWT Swing 只是使用更好的 GUI 组件 如 JButton 代替 AWT 中相应的 GUI 组件 如 Button 并且增加了一些 AWT 中原来所没有的 GUI 组件 并且 Swing 仍使用 AWT 1 1 的事件处理模型 虽然现在 AWT 组件仍得到支持 但是建议在你的应用程序中尽量使用 Swing 组件和 1 1 的事件模型 1 标签 JLabel 标签 JLabel 通常是用来标识另外一个组件的含义 以在标签上显示文字 图象或是 文字图象的组合 JLabel labText new JLabel 文本标签 labText setText 文本标签 ImageIcon icon new ImageIcon image greenflag20 gif JLabel labImage new JLabel icon labImage setIcon icon 2 密码框 JPasswordField 密码框实际上是一种特殊类型的文本框 用户可以向其中输入文本并加以编辑 和文 本框不同的是 向密码框中输入文本时 显示的不是实际输入的文本 而是特殊的回显字 符 通常是 可以使用 setEchoChar char c 方法来改变缺省的回显字符 需要注意的是 取得文本框中的文本时 使用方法 getText 该方法返回的是一个 String 类型的对象 而要取得密码框中的文本 使用方法 getPassword 该方法返回的 是一个 char 数组 例如 创建了一个密码框 JPasswordField txtPwd new JPasswrodField 20 设定该密码框的回显字符为 txtPwd setEchoChar 取得密码框中的内容 char pwd txtPwd getPassword 也可以方便地将 char 数组转化为 String 类型的对象 String pwdStr new String txtP getPassword 3 菜单 1 菜单也是一种常用的 GUI 组件 菜单采用的是一种层次结构 最顶层是菜单栏 JMenuBar 在菜单栏中可以添加若干个菜单 JMenu 每个菜单中又可以添加若干个菜单 选项 JMenuItem 分隔线 Separator 或是菜单 称之为子菜单 2 构建应用程序的菜单时 先创建一个菜单栏 JMemuBar menuBar new JMenuBar 通常使用框架的 setJMenuBar JMenuBar aMenuBar 方法将菜单栏置于框架中 frame setJMenuBar menuBar 随后 创建所需要的各菜单并逐个添加到菜单栏中 例如 JMenu menuDBAccount new JMenu 电表出帐 C JMenu menuSysConfig new JMenu 系统设置 X menuBar add menuDBAccount menuBar add menuSysConfig 最后 向各个菜单中添加菜单选项 分隔线或是子菜单 如图所示的系统设置菜单为 例 创建菜单选项或是子菜单 JMenuItem sysConfigItem new JMenuItem 参数设置 S JMenu viewMenu new JMenu 外观设置 JRadioButtonMenuItem metalItem new JRadioButtonMenuItem 金属外观 JRadioButtonMenuItem classicItem new JRadioButtonMenuItem 传统外观 JRadioButtonMenuItem modernItem new JRadioButtonMenuItem 现代外观 JMenuItem cascadeItem new JMenuItem 层叠窗口 C JMenuItem iconifyItem new JMenuItem 排列图标 I 将三个单选按钮添加到一个按钮组 ButtonGroup group new ButtonGroup group add metalItem group add classicItem group add modernItem 构建子菜单 viewMenu add metalItem viewMenu add classicItem viewMenu add modernItem 添加到系统设置菜单 menuSysConfig add sysConfigItem 添加菜单选项 menuSysConfig add viewMenu 添加子菜单 menuSysConfig add cascadeItem 添加菜单选项 menuSysConfig addSeaparator 添加分隔线 menuSysConfig add iconifyItem 添加菜单选项 3 通常的菜单选项是 JMenuItem 也可以使用复选框或是单选按钮类型的菜单选项 分别是 JCheckBoxMenuItem 和 JRadioButtonMenuItem 和 JRadioButton 一样 使用 JRadioButtonMenuItem 时 需要将它们添加到同一个按钮组中 4 当点击一个菜单选项时 会生成一个动作事件 ActionEvent 为菜单选项添加事 件侦听器就可以侦听其动作事件 例如 sysConfigItem addActionListener aListener 5 为一个菜单或是菜单选项设置快捷键 menuSysConfig setMnemonic X sysConfigItem setMnemonic S 6 如果需要快速选择未打开的菜单中的菜单选项或是子菜单 可以使用加速键 例如 当希望按下 CTRL L 时就立刻选中 lockItem 菜单选项 而不管 lockItem 所在的菜单是否已 经打开 就可以使用下面的方法为 lockItem 设置加速键 KeyStroke ks KeyStroke getKeyStroke KeyEvent VK L InputEvent CTRL MASK lockItem setAccelerator ks 4 弹出式菜单 1 弹出式菜单 JPopupMenu 是一种特殊的菜单 和普通菜单的区别在于其不固定在菜 单栏中 而是可以四处浮动的 2 下面的语句创建了一个弹出式菜单 JPopupMenu popup new JPopupMenu 与向菜单中添加菜单选项 分隔线或是子菜单一样 使用同样的方法向弹出式菜单中 添加内容 用户可以通过点击某个特殊的鼠标键 称为触发器 来触发弹出式菜单 例如 在 Windows 操作系统上 一般是鼠标右键 为此 应用程序中应该监听弹出式菜单的父组件的鼠标事件 当有鼠标事件发生时 使用 isPopupTrigger 方法来判断是否为弹出式菜单的触发器 如果是 则在该父组件上 显示出弹出式菜单 同样以图所示意的弹出式菜单为例 该菜单的父组件是一个显示公司 徽标的标签 labLogo 当用户在该标签上右击鼠标时 弹出式菜单出现 下面的代码实现 了上述功能 labLogo addMouseListener new MouseAdapter public void mouseReleased MouseEvent e if e isPopupTrigger popup show labLogo e getX e getY 5 工具条 1 有些菜单选项的使用频率较高 每次使用都要打开菜单 效率较低 为此 可以在 工具条 JToolBar 中提供与这些菜单选项相对应快捷按钮 以提高用户的效率 工具条中 通常是一些带有图标的按钮 当然也可以是其它类型的 GUI 组件 例如组合框等等 2 通常 工具条所提供的操作是菜单所能提供操作的一个子集 目的是能够快速访问 那些使用频率高的操作 3 工具条通常被置于布局为 BorderLayout 的容器中 工具条被置于布局为 BorderLayout 的一个面板中 工具条还有一个特点 可以被拖动到所在容器其它边界 甚 至脱离其所在的容器 4 生成一个工具条对象 可以使用语句 JToolBar toolbar new JToolBar 5 还可以在生成工具条时 指明工具条的标题 这样 当工具条脱离所在容器时 可 以在自己的标题栏显示标题 JToolBar toolbar new JToolBar 颜色工具条 6 向工具条中添加组件 使用 add 方法 toolbar add btnBlue toolbar add btnYellow 7 缺省情况下 组件是按照水平方式逐个添加入工具条的 也可以在生成工具条时指 明以垂直方式来添加组件 JToolBar toolbar new JToolBar SwingConstants VERTICAL 8 如果希望工具条不能移动 可以使用 setFloatable 方法来设置 toolbar setFloatable false 9 当工具条中的按钮上只显示图标时 用户可能不能确切知道各个按钮的具体含义 可以使用工具提示解决这个问题 btnYellow setToolTipText 面板置为黄色 6 对话框 1 对话框是用户和应用程序进行交互 对话 的一个桥梁 对话框可以用于收集用户的 输入数据传递给应用程序 或是显示应用程序的运行信息给用户 2 对话框分为模式 modal 和非模式两种 模式对话框处于可见状态时 用户将不能 与应用程序的其它窗口进行交互 而非模式对话框则没有此限制 3 Java 中提供了一个类 JOptionPane 用于创建简单的模式对话框 如果希望创建非 模式对话框或是自定义对话框可以使用 JDialog 4 JOptionPane 类中提供了 4 种静态方法 用以显示 4 种常用的对话框 showMessageDialog 消息对话框 showInputDialog 输入对话框 showConfirmDialog 确认对话框 showOptionDialog 选项对话框 5 JOptionPane 对话框主要由如下几个部分构成 图标 消息以及按钮 6 类 JOptionPane 中定义了如下五个常量 JOptionPane QUESTION MESSAGE JOptionPane INFORMATION MESSAGE JOptionPane WARNING MESSAGE JOptionPane ERROR MESSAGE JOptionPane PLAIN MESSAGE 不使用图标 前四个常量对应着四个图标 第五个常量表示不使用图标 开发人员可以使用这些常 量来指定对话框中显示的图标 当然 对话框也提供了方法使得开发人员可以使用自己的 图标 7 JOptionPane 对话框不仅仅可以显示字符串类型的消息 还可以显示其它类型的消 息 例如 可以是一副图片 还可以是一个 GUI 组件 更广泛地说 这里的消息可以是任 何类型的对象或是对象数组 在书上的例子中 你可以看到不同类型消息的应用 8 JOptionPane 对话框底部的按钮取决于对话框类型和选项类型 例如 对于确认对 话框 可以使用如下的四种选项类型之一 DEFAULT OPTION YES NO OPTION YES NO CANCEL OPTION OK CANCEL OPTION 9 如果设计一个包括两个标签 一个文本输入框 一个密码输入框和两个按钮的登录 对话框 这些 GUI 组件被添加到一个使用了网格袋布局的面板 panel 中 面板 panel 又被 添加到 LoginDialog 的内容窗格 类 LoginDialog 继承了 JDialog 先来看一下 LoginDialog 的构建器 public LoginDialog Frame f String s boolean b 该构建器中包含了 3 个参数 f 和 s 分别是对话框的父窗口和标题 布尔类型的参数 b 用来确定对话框的类型 当取值为 true 时 表示是模式对话框 取值为 false 时 表示 是非模式对话框 7 表格 1 表格 JTable 也是一种常用的 GUI 组件 常用来显示大量的数据 2 表格是模型 视图 控制器设计模式的一个典型应用 表格本身并不存储所显示的 数据 数据实际上是存储在表模型中的 表格只是表模型的一种视图 3 JTable 提供了如下两种构建器 可以方便地创建简单表格 JTable Object data Object columnNames JTable Vector data Vector columnNames 4 采用上述方法可以发现存在不少缺点 例如 每一列的宽度都是一样的 未能正确 显示日期 数值未能按照我们的希望保留到小数点后面两位 并靠右显示 表格中的数据 必须预先存放在一个数组中或是向量 Vector 中等等 在一个真正的应用程序中 使用这 样的表格是不能满足实际应用的要求的 5 在缺省情况下 表格中每列是等宽的 并且调整某列的宽度时 其它列的宽度也会 相应自动调整 可以使用下面的语句关闭列宽自动调整特性 table setAutoResizeMode JTable AUTO RESIZE OFF 之后 要设定某列的宽度 首先依据该列的列名取得列对象 以设定第一列宽度为例 TableColumn col table getColumn columnNames 0 然后调用 setPreferredWidth 方法设定该列宽度 col setPreferredWidth 200 6 前面已经提到 表格有一个对应的表模型 数据是存储在表模型中 表格是表模型 的视图 表格在建立视图时总需要自动调用表模型中的一些方法 这些方法的返回值决定 了最终的视图 部分常需要用到的方法的名称和含义如下 public int getRowCount 取得行数 public int getColumnCount 取得列数 public Object getValueAt int row int column 取得指定单元格的数据 指定单元格是否允许编辑 public boolean isCellEditable int row int column public String getColumnName int column 取得指定列的列名 public Class getColumnClass int column 缺省表模型 DefaultTableModel 提供了上述方法的缺省实现 例如 DefaultTableModel 中的 isCellEditable 方法总是返回 true 表示所有的单元格都允许编 辑 getColumnClass 方法总是返回 Object class 7 可以使用 DefaultTableModel 创建一个表模型对象 然后再使用表模型创建表格 例如 DefaultTableModel model new DefaultTableModel 0 5 0 行 5 列的表模型 JTable table new JTable model 然后 可以使用 model 的 addRow removeRow 方法向表模型中添加或是删除数据 对 表模型增删数据的结果会自动反映到表格视图上来 但是 通常情况下 我们并不直接使用 DefaultTableModel 更多的情形是继承 DefaultTableModel 类 并覆盖其中部分方法以达到特殊的要求 8 树形控件 1 JTree 构造函数 A JTree 建立一棵系统默认的树 B JTree Hashtable value 利用 Hashtable 建立树 不显示 root node 根节点 C JTree Object value 利用 Object Array 建立树 不显示 root node D JTree TreeModel newModel 利用 TreeModel 建立树 E JTree TreeNode root 利用 TreeNode 建立树 F JTree TreeNode root boolean asksAllowsChildren 利用 TreeNode 建立树 并 决定是否允许子节点的存在 G JTree Vector value 利用 Vector 建立树 不显示 root node 2 JTree 上的每一个节点就代表一个 TreeNode 对象 TreeNode 本身是一个 Interface 里面定义了 7 个有关节点的方法 例如判断是否为树叶节点 有几个子节点 getChildCount 父节点为何 getparent 等等 这些方法的定义你可以在 javax swing tree 的 package 中找到 读者可自行查阅 java api 文件 3 在实际的应用上 一般我们不会直接实作此界面 而是采用 java 所提供的 DefaultMutableTreeMode 类 此类是实作 MutableTreeNode 界面而来 并提供了其他许多 实用的方法 MutableTreeNode 本身也是一个 Interface 且继承了 TreeNode 界面此类主要是定义一 些节点的处理方式 例如新增节点 insert 删除节点 remove 设置节点 setUserObject 等 整个关系如下图 TreeNode extends MutableTreeNode implements DefaultMutableTreeNode 4 我们来看如何利 DefaultMutableTreeNode 来建立 JTree 我们先来看 DefaultMutableTreeNode 的构造函数 DefaultMutableTreeNode 构造函数 DefaultMutableTreeNode 建立空的 DefaultMutableTreeNode 对象 DefaultMutableTreeNode Object userObject 建立 DefaultMutableTreeNode 对象 节点为 userObject 对象 DefaultMutableTreeNode Object userObject Boolean allowsChildren 建立 DefaultMutableTreeNode 对象 节点为 userObject 对象并决定此节点是否允许具有子节 点 5 除了以节点的观念 TreeNode 建立树之外 你可以用 data model 的模式建立树 树的 data model 称为 TreeModel 用此模式的好处是可以触发相关的树事件 来处理树可 能产生的一些变动 TreeModel 是一个 interface 里面定义了 8 种方法 如果你是一个喜欢 自己动手做的人 或是你想显示的数据格式很复杂 你可以考虑直接实作 TreeModel 界面 中所定义的方法来构造出 JTree TreeModel 界面的方法如下所示 TreeModel 方法 void addTreeModelListener TreeModelListener l 增加一个 TreeModelListener 来监控 TreeModelEvent 事件 Object getChild Object parent int index 返回子节点 int getChildCount Object parent 返回子节点数量 int getIndexOfChild Object parent Object child 返回子节点的索引值 Object getRoot 返回根节点 boolean isLeaf Object node 判断是否为树叶节点 void removeTreeModelListener TreeModelListener l 删除 TreeModelListener void valueForPathChanged TreePath path Object newValue 当用户改变 Tree 上的 值时如何应你可以实作出这 8 种方法 然后构造出自己想要的 JTree 不过在大部份的情况 下我们通常不会这样做 毕竟要实作出这 8 种方法不是件很轻松的事 而且 java 本身也提 供了一个默认模式 叫做 DefaultTreeModel 这个类已经实作了 TreeModel 界面 也另外 提供许多实用的方法 利用这个默认模式 我们便能很方便的构造出 JTree 出来了 下面 为 DefaultTreeModel 的构造函数与范例 DefaultTreeModel 构造函数 DefaultTreeModel TreeNode root 建立 DefaultTreeModel 对象 并定出根节点 DefaultTreeModel TreeNode root Boolean asksAllowsChildren 建立具有根节点的 Defa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 停车技术考试题及答案
- 田径考试试题及答案
- 第41个教师节校长讲话:三心育德润心田三志引领立师范三力汇聚启新篇
- 2025年高压电工复审考试及考试题库含答案
- 2025年高级维修电工理论知识复习题库及答案
- 2025年高级保安员模拟试题及答案
- 铁路船务知识题库及答案
- 财务审批流程管理办法
- 西藏特产仓储管理办法
- 专利代理管理办法诚信
- 《室内空间设计》第二章课件
- 危大工程巡视检查记录
- 大型机械设备归档资料(塔吊 施工电梯 安装验收 检查等)
- Python基础课件(共282张PPT)
- DB44∕T 1836-2016 不锈钢美容工具
- 竞争性谈判项目谈判文件
- 高一新生入学家长会发言稿
- (完整word版)门禁系统施工工艺
- 平行平板多光束干涉ppt课件
- 纪录片提案登记表
- 五运六气方剂
评论
0/150
提交评论