1. java论文 教程16 国旗知识测评应用程序 专班业: 软件服务外包专业 级:二班 学生姓名: 程媛 学 号:201015140102 指导教师: 张海波 完成时间: 2015年3月1日 目录
(一)程序需求分析
(二)创建国旗知识测评应用程序 声明并初始化数组 自定义JComboBox组件 选择只出现一次的国旗 显示国旗 处理用户的答案 显示下一面国旗 数组排序
(三)小结
程序需求分析
应用程序需求分析:
某地理课老师想测试一下学生对不同国家国旗知识的了解情况,因此,设想开发一个应用程序显示不同国家的国旗并允许学生从列表中选出与国旗相对应的国家名。之后,应用程序会告知该答案是否正确并继续显示下一面国旗。此应用程序将从澳大利亚、巴西、中国、意大利、俄罗斯、南非、西班牙、美国这8个国家的国旗中随机的挑选出5面国旗来进行显示。当应用程序执行时,所有国旗只能显示一次。
声明并初始化数组
声明存储国家名的数组
声明并初始化数组countries。该数组中的每一个元素为含国家名的一个string。代码: private String[] countries =
{ \"Russia\", \"China\",\"United
States\, \"Australia\", \"South Africa\", \"Brazil\", \"Spain\" };//创建存储国家
名的String型数组
创建一个boolean型数组
我们将通过boolean型数组,记录下所有已显示的国旗。代码:
// boolean array tracks displayed flags
private boolean[] flagsUsed = new boolean[ countries.length ];
声明实例变量
实例变量currentIndex,用于存储当前所显示国旗的索引。此值可用于判断用户输入的答案是否正确。在第22行 上声明并初始化的这一实例变量count,用来确保只显示5面国旗。代码:
private int currentIndex; // contains the index of current flag
// tracks the number of flags that have been displayed
private int count = 1;
自定义JComboBox组件
自定义JComboBox
在语句new JComboBox的圆括号内添加数组名countries。位于关键字new右侧的JComboBox()被称为构造方法。该代码行将创建一个JComboBox并为其“装载”要显示的所有选项。利用数组countries可以实现其内部元素到JComboBox选项的装载工作。代码:
selectCountryJComboBox = new JComboBox( countries );//
向JComboBox中添加数据 设置JcomboBox的范围
代码:selectCountryJComboBox.setBounds( 136, 32, 135, 21 );
设置selectCountryJComboBox的外观
此代码行通过JComboBox的setMaximumRowCount方法将selectCountryJComboBox中一次可以显示的选项数设置为3。如果selectCountryJComboBox中的选项总数超过这个数字,则会自动出现一个垂直滚动条以便供用户访问其余的选项。代码:
selectCountryJComboBox.setMaximumRowCount( 3 );//设置
selectCountryJComboBox中可以显示的最大选项数 显示selectCountryJComboBox的国旗知识测评应用程序
选择只出现一次的国旗
生成随机索引并保证每一面国旗只出现一次
利用Random的对象generator生成一个随机数。创建一个用来存储由generator产生的随机数的变量randomNumber。此随机数将作为flagsUsed数组的一个索引,从而判断该位置上的国旗是否已经显示过。利用do-while循环语句迭代查找其中的一个索引。 代码: Random generator = new Random();
int randomNumber;
// generate random numbers until unused flag is found do {
// generate a number between 0-7
randomNumber = generator.nextInt( 8 ); }
while ( flagsUsed[ randomNumber ] == true );
标示已被使用的索引
将数组flagsUsed中索引为randomNumber的元素设置为true。此时,randomNumber中包含了一个需要显示的国旗索引 代码:
// indicate that flag has been used
flagsUsed[ randomNumber ] = true;
返回唯一的随机数 代码:
return randomNumber;//返回randomNumber的值
显示国旗
通过唯一索引检索国家名
选择该应用程序执行过程中未曾显示过得一个索引并将其赋值给currentIndex。通过JComboBox的getItemAt方法将该面国旗所对应的国家名赋值给String型变量country。所使用的方法将接收一个代表索引的int型参数并返回该索引位于JComboBox中的对象,然后利用造型运算符将此对象转换成一个String。代码:
currentIndex = getUniqueRandomNumber(); // get an unused flag
// create the path for that flag String country =
( String )selectCountryJComboBox.getItemAt( currentIndex );
获取未显示的国旗的索引并检索出与该国旗相对应的国家名 创建国旗图片的路径名 代码:
String
countryPath=\"E:\\\\Tutorial16\\\\CompletedApplication\\\\FlagQuiz\\\\images\\\\\" + country + \".png\";
显示国旗图片 代码:
// set the flagIconJLabel to display the flag
flagIconJLabel.setIcon( new ImageIcon( countryPath ) );
使用setIcon显示国旗
显示应用程序运行中的国旗 代码:
displayFlag(); // display first flag
应用程序开始运行时显示第一面国旗 显示第一面国旗的国旗知识测评应用程序
处理用户的答案
取得已选择的selectCountryJComboBox选项
取得用户答案并判断用户答案是否与正确答案相一致 ,显示正确的反馈信息 代码:
// determine whether the answer was correct
if ( selectCountryJComboBox.getSelectedIndex() == currentIndex ) {
feedbackJTextField.setText( \"Correct!\" ); }
else // if an incorrect answer is given {
feedbackJTextField.setText( \"Sorry, incorrect.\" );
}
当第五面国旗均被显示则通知用户测验结束
如果5面国旗均已显示,则通过feedbackJTextField显示一行文本,告知用户测验已结束,同时禁用两个JButton,此外对selectCountryJComboBox也需要进行禁用 代码:
if ( count == 5 ) {
feedbackJTextField.setText(
feedbackJTextField.getText() + \" Done!\" ); nextFlagJButton.setEnabled( false ); submitJButton.setEnabled( false );
JButton 代码:
selectCountryJComboBox.setEnabled( false );
}
若显示的国旗数少于5则继续进行测验
如果测验未结束则应用程序需禁用SubmitJButton并启用Next Flag
else // if less than 5 flags have been displayed {
submitJButton.setEnabled( false ); nextFlagJButton.setEnabled( true );
运行应用程序
}
允许用户提交答案的国旗知识测评应用程序
显示下一面国旗
显示下一面国旗
通过调用displayFlag方法将下一面国旗放置到了JLabel中,通过更新count指定下一面将要显示的国旗 代码:
displayFlag(); // display next flag
count++;
清除以前结果并复位组件
利用setSelectedIndex方法将selectCountryJComboBox的selectedIndex属性设置为0,从而在selectCountryJComboBox的
下拉列表中显示第一个选项,通过启用SubmitJButton以及禁用Next Flag JButton迫使用户在显示下一面国旗之前提交答案。 代码:
feedbackJTextField.setText( \"\" );
selectCountryJComboBox.setSelectedIndex( 0 ); submitJButton.setEnabled( true );
nextFlagJButton.setEnabled( false );
运行应用程序
未按字母顺序排列
数组排序
按字母顺序排序数组中的国家名 代码:
输入的答案正确
测验完成后的应用程序
Arrays.sort( countries ); // sort the array
运行应用程序
按照字母顺序排列选项
小结
在创建国旗知识测评应用程序的过程中,学习了如何创建并初始化一维数组,以及如何通过使用一个索引访问数组中的数据,表达式arrayNameLength可用来取得数组arrayName中的元素个数,学习了如何将JComboBox组件添加到应用程序中以及如何修改JComboBox的外观等内容,通过使用Arrays.sort方法懂得如何将数组中的元素按照字母顺序进行排序。