201871010133-赵永军《面向对象程序设计(java)》第十五周学习总结
| 项目 | 内容 |
| 这个作业属于哪个课程 | https://www.cnblogs.com/nwnu-daizh/ |
| 这个作业的要求在哪里 | https://www.cnblogs.com/nwnu-daizh/p/11995615.html |
| 作业学习目标 |
(1) 掌握菜单组件用途及常用API; (2) 掌握对话框组件用途及常用API; (3) 学习设计简单应用程序的GUI。 |
第一部分:理论部分
一、 菜单
位于窗口顶部的菜单栏(menu bar)包括了下拉菜单的名字。点击一个名字就可以打开包含菜单项和子菜单的菜单。
当用户点击菜单项时,所有的菜单都会被关闭并且将一条消息发送给程序。
1、菜单
创建菜单栏:
JMenuBar menuBar=new JMenuBar()
将菜单栏添加到框架:
frame.setJMenuBar();
为每个菜单建立一个菜单对象:
JMenu editMenu=new JMenu("Edit");
将顶层菜单添加到菜单栏中:
menuBar.add(editMenu);
向菜单对象添加菜单项,分隔符和子菜单:
JMenuItem pasteItem=new JMenuItem("Paste");
editMenu.add(pasteItem);
editMenu.addSeparator();
JMenu optionsMenu=...;
editMenu.add(optionsMenu);
2、菜单项中的图标
JMenuItem类扩展了AbstractButton类。与按钮一样,菜单可以包含文本标签、图标,也可以两者都包含。
既可以利用JMenuItem(String,Icon)或者JMenuItem(Icon)构造器为菜单指定一个图标,
也可以利用JmenuItem类中的setIcon方法(继承自AbstractButton类)指定一个图标
3、复选框和单选按钮菜单项
复选框和单选按钮菜单项在文本旁边显示了一个复选框或一个单选按钮。
当用户选择一个菜单框时,菜单项就会自动地在选择和未选择间进行切换
4、弹出菜单
弹出菜单(pop-up menu)是不固定在菜单栏中随处浮动的菜单
创建一个弹出菜单和创建一个常规菜单方法类似,只是弹出菜单没有标题
当用户点击某个鼠标键时弹出菜单。这就是所谓的弹出式触发器(pop-up trigger)。
在Window或者Linux中,弹出式触发器是鼠标右键。
5、快捷键和加速器
可以通过在菜单项的构造器中指定一个快捷字母来为菜单项设置快捷键
快捷键会自动地显示在菜单项中,并带有一条下划线
如果有一个Action对象,就可以把快捷键作为Action.MNEMONIC_KEY的键值添加到对象中。
cutAction.putValue(Action.MENMONIC_KEY,new Integer('A'));
只能在菜单项的构造器中设定快捷键子母,而不是在菜单构造器中。如果想为菜单设置快捷键,需要调用setMnemonic方法:
JMenu helpMenu=new JMenu("helo");
helpMenu.setMnemonic('H');
可以同时按下ALT键和菜单的快捷键来实现在菜单栏中选择一个顶层菜单的操作。
可以使用快捷键从当前打开的菜单中选择一个子菜单或者菜单项。而加速器是在不打开菜单的情况下选择菜单项的快捷键。
当用户按下加速器组合键时,就会自动地选择相应的菜单项,同时激活一个动作事件,这与手动地选择这个菜单项一样。
加速器只能关联到菜单项上,不能关联到菜单上。加速器键并不实际打开菜单。它将直接地激活菜单关联的动作事件
6、启用和禁用菜单项
启动和禁用菜单项有两种策略。每次环境发生变化就对相关的菜单项或动作调用setEnabled。
另一种方式是在现实菜单之前禁用这些菜单栏
7、工具提示
工具栏有个缺点就是用户常常需要猜测按钮上小图标按钮的含义,为解决这个问题,用户界面设计了工具提示。
当光标停留在某个按钮上片刻时,工具提示就会被激活。
工具提示文本显示在一个有颜色的矩形里。当用户移开鼠标时,工具提示就会自动地消失
二、对话框
1、对话框
与大多数的窗口系统一样,AWT也分为模式对话框和无模式对话框。
模式对话框是指在结束对它的处理之前,不允许用户与应用程序的其余窗口进行交互。
模式对话框主要用于在程序继续运行之前获取用户提供的信息。
无模式对话框是指允许用户同时在对话框和应用程序的其他窗口中输入信息。
使用无模式对话框的最好例子就是工具栏。工具栏可以停靠在任何地方,
并且用户可以在需要的时候,同时与应用程序窗口和工具栏进行交互。
简单信息模式对话框:
Swing有一个很容易使用的类JOptionPane,它可以弹出一个简单的对话框,而不必编写任何对话框的相关代码。
2、选项对话框
Swing有一套简单的对话框,用于获取用户的一些简单信息。
JOptionPane有4个用于显示这些对话框的静态方法:
showMessageDialog:显示一条消息并等待用户点击OK
showConfirmDialog:显示一条消息并等待用户确认(与OK/Cancel类似)
showOptionDialog:显示一条消息并获得用户在一组选项中的选择
showInputDialog:显示一条消息并获得用户输入的一行文本
输入对话框有一个用于接收用户输入的额外组件。它既可能是用于输入任何字符串的文本域,也可能是允许用户从中选择的组合框
每个对话框类型都有一个方法,可以用来提供自己的图标,以替代原来的图标。
可以为每个对话框类型指定一条消息,如字符串、图标、用户界面组件,或其他类型的对象
唯一底部的按钮取决于对话框类型和选项类型
使用showOptionDialog可以指定任意的选项
3、创建对话框
要想创建一个对话框,需要从JDialog派生一个类,具体过程:
1) 在对话框构造器中,调用超类JDialog的构造器。
2) 添加对话框的用户界面组件。
3) 添加事件处理器。
4) 设置对话框的大小。
在调用超类构造器时,需要提供拥有者框架(owner frame)、对话框标题及模式特征。
拥有者框架控制对话框的显示位置,如果将拥有者标识为null,那么对话框将由一个隐藏框架所拥有。
模式特征将指定对话框处于显示状态时,应用程序中其他窗口是否被锁住。
无模式对话框不会锁住其他窗口,而有模式对话框将锁住应用程序中的所有其他窗口(除对话框的子窗口外)。
用户经常使用的工具栏就是无模式对话框,另一方面,如果想强迫用户在继续操作之前提供一些必要的信息就应该使用模式对话框。
4、文件对话框
一个好的文件对话框可以显示文件和目录,可以让用户浏览文件系统。
Swing中提供了JFileChooser类,它可以显示一个文本对话框,其外观与本地应用程序中使用的文件对话框基本一样。
JFileChooser是一个模式对话框
建立文件对话框并且获取用户选择信息的步骤如下:
1 建立一个JFileChooser对象。与JDialog类的构造器不同,它不需要指定父组件。允许在多个框架中重用一个文件选择器。
2 调用setCurrentDirectory方法设置当前目录。
3 如果有一个想要作为用户选择的默认文件名,可以使用setSelectedFile方法进行指定。
4 如果允许用户在对话框中选择多个文件,需要调用setMultiSelectionEnabled方法
5 如果想让对话框仅显示某一种类型的文件,需要设置文件过滤器。
6 在默认情况下,用户在文件选择器中只能选择文件。如果希望选择目录,需要调用setFileSelectionMode方法。
参数值为:JFileChooser.FILES_ONLY(默认值),JFileChooser.DIRECTORIES_ONLY或者JFileChooser.FILES_AND_DIRECTORIES。
7 调用showOpenDialog或者showSaveDialog方法显示对话框。
8 调用getSelectedFile()或者getSelectedFiles()方法获取用户选择的一个或多个文件。
三、常用API
①java.lang.reflect.AccessibleObject
void setAccessible(boolean flag)
为反射对象设置可访问标志。flag为true表明屏蔽Java语言的访问检查,使得对象的私有属性也可以被查询和设置。
boolean isAccessible()
返回反射对象的可访问标志的值。
static void setAccessible(AccessibleObject[] array,boolean flag)
是一种设置对象数组可访问标志的快捷方法。
②java.lang.Class
Field getField(String name)
Field getField()
返回指定名称的公有域,或包含所有域的数组。
Field getDeclaredField(String name)
Field getDeclaredFields()
返回类中声明的给定名称的域,或者包含声明的全部域的数组。
③java.lang.reflect.Field
Object get(Object obj)
返回obj对象中用Field对象表示的域值。
void set(Object obj,Object newValue)
用一个新值设置Obj对象中Field对象表示的域。
2、实验内容和步骤
实验1: 导入第12章示例程序,测试程序并进行组内讨论。
测试程序1
※在elipse IDE中调试运行教材512页程序12-8,结合运行结果理解程序;
※掌握菜单的创建、菜单事件监听器、复选框和单选按钮菜单项、弹出菜单以及快捷键和加速器的用法。
※记录示例代码阅读理解中存在的问题与疑惑。
实验程序如下:
1 package menu; 2 3 import java.awt.*; 4 import javax.swing.*; 5 6 /** 7 * @version 1.24 2012-06-12 8 * @author Cay Horstmann 9 */ 10 public class MenuTest 11 { 12 public static void main(String[] args) 13 { 14 EventQueue.invokeLater(() -> { 15 JFrame frame = new MenuFrame(); 16 frame.setTitle("MenuTest"); 17 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 18 frame.setVisible(true); 19 }); 20 } 21 }