简易四则运算生成程序——添加GUI支持
工程地址:
https://coding.net/u/jx8zjs/p/paperOne/git
ssh://git@git.coding.net:jx8zjs/paperOne.git
需求:
1.GUI支持:用户界面新增支持 Windows GUI,同时保留原有命令行下所有功能。
2.配置文件:提供用户可用文本编辑器修改的配置文件,在其中包括用户名、当前难度、总答题数、答错题数、答对题数。
3.错题本:可回放做错的题目,提供再次练习的机会/删除特定错题。
设计:
1.GUI编程可以使用windowbuilder辅助编写;
2.配置文件可以在程序运行时读入并初始化设定,并且在用户答题之后点击按钮同时将错题记录下来并保存到文件中;
3.回放错题时,将错题保存在arraylist中,删除时根据指定删除特定行,并在用户提交时将新的错题集覆盖写入错题本中。
运行:
由于提供了图形化界面,操作提示更加通俗易懂,具体效果会在后面结果中展示。需要注意的是,答题结果以及部分错误提示会在窗口正下方展示,而不是以弹窗的方式。
代码:
1.初始参数声明:主要定义了窗口、问题、答案等。
- private JFrame frmPaperone;
- private JTextField textFieldNum;
- QuestionGen qg = new QuestionGen();
- ArrayList<String[]> questions = new ArrayList<String[]>();
- ArrayList<JTextField> answers = new ArrayList<JTextField>();
- public MainWindow() {
- initialize();
- }
2.设置窗口:包括标签、按钮、输入框、排列方式等等。
- frmPaperone = new JFrame();
- frmPaperone.setTitle("PaperOne出题助手");
- frmPaperone.setBounds(100, 100, 761, 496);
- frmPaperone.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frmPaperone.getContentPane().setLayout(new BorderLayout(0, 0));
- JPanel panelConfig = new JPanel();
- frmPaperone.getContentPane().add(panelConfig, BorderLayout.NORTH);
- JLabel lblNewLabel = new JLabel("出题难度");
- panelConfig.add(lblNewLabel);
- JComboBox<String> comboBoxComplex = new JComboBox<String>();
- comboBoxComplex.setModel(new DefaultComboBoxModel<String>(new String[] { "简单", "普通", "中等", "复杂" }));
- panelConfig.add(comboBoxComplex);
- JLabel label = new JLabel("出题数量");
- panelConfig.add(label);
- textFieldNum = new JTextField();
- textFieldNum.setText("10");
- panelConfig.add(textFieldNum);
- textFieldNum.setColumns(10);
- JLabel label_1 = new JLabel("运行模式");
- panelConfig.add(label_1);
- JComboBox<String> comboBoxMode = new JComboBox<String>();
- comboBoxMode.setModel(new DefaultComboBoxModel<String>(new String[] { "答题模式", "打印模式" }));
- panelConfig.add(comboBoxMode);
- JLabel label_2 = new JLabel("答题时间");
- panelConfig.add(label_2);
- JSpinner spinnerMinute = new JSpinner();
- panelConfig.add(spinnerMinute);
- JLabel label_3 = new JLabel("分");
- panelConfig.add(label_3);
- JSpinner spinnerSecond = new JSpinner();
- panelConfig.add(spinnerSecond);
- JLabel label_4 = new JLabel("秒");
- panelConfig.add(label_4);
- JPanel panelStatus = new JPanel();
- frmPaperone.getContentPane().add(panelStatus, BorderLayout.SOUTH);
- JLabel messageBar = new JLabel(" ");
- panelStatus.add(messageBar);
- JPanel panelMain = new JPanel();
- frmPaperone.getContentPane().add(panelMain, BorderLayout.CENTER);
- panelMain.setLayout(new MigLayout("", "[][grow]", "[][]"));
3.设置按钮动作:点击“开始出题”按钮之后要进行的操作,包括检测用户输入的设置是否合法、根据用户选择的难度出题、检测用户选择的模式(答题模式或打印模式)、答题模式下判断对错 等等。值得注意的是,在点击按钮时需要清空原本遗留的数据,比如Arraylist、JPanel等。
- JButton buttonStart = new JButton("开始出题");
- buttonStart.addMouseListener(new MouseAdapter() {
- public void mouseClicked(MouseEvent event) {
- frmPaperone.repaint();
- messageBar.setText("");
- String numstr = textFieldNum.getText();
- int complex = comboBoxComplex.getSelectedIndex();
- int mode = comboBoxMode.getSelectedIndex();
- panelMain.removeAll(); //初始化
- questions.clear();
- answers.clear();
- if (isNumeric(numstr)) { //后续操作均是在用户输入合法条件下进行的
- int num = Integer.parseInt(numstr);
- for (int n = 0; n < num; n++) {
- String[] question = new String[2];
- switch (complex) { //判断用户选择的出题难度
- case 0: {
- question[0] = qg.generateSimpleQuestion();
- break;
- }
- case 1: {
- question[0] = qg.generateCommonQuestion();
- break;
- }
- case 2: {
- question[0] = qg.generateMediumQuestion();
- break;
- }
- case 3: {
- question[0] = qg.generateComplexQuestion();
- break;
- }
- default:
- }
- try {
- question[0] = "Question " + (n + 1) + " :" + question[0];
- question[1] = qg.answer;
- questions.add(question);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- switch (mode) { //判断用户所选的模式
- case 0: {
- for (int m = 0; m < num; m++) {
- JLabel questionBar = new JLabel(" ");
- panelMain.add(questionBar, "cell 0 " + m + ",alignx trailing");
- JTextField answerBar = new JTextField("", 20);
- panelMain.add(answerBar, "cell 1 " + m + " ,alignx trailing");
- questionBar.setText(questions.get(m)[0]);
- answers.add(answerBar);
- }
- JButton saveButton = new JButton("保存到错题本");
- saveButton.addMouseListener(new MouseAdapter() {
- public void mouseClicked(MouseEvent event) {
- }
- });
- saveButton.setVisible(false);
- panelStatus.add(saveButton);
- JButton sudmitButton = new JButton("提交");
- sudmitButton.addMouseListener(new MouseAdapter() { //判断对错
- public void mouseClicked(MouseEvent event) {
- String faultQuestion = new String("");
- String correctAnswer = new String("");
- for (int s = 0; s < num; s++) {
- String answer = new String();
- answer = answers.get(s).getText();
- if (!answer.trim().equals(questions.get(s)[1])) {
- faultQuestion += (" " + (s + 1));
- correctAnswer += (" " + questions.get(s)[1]);
- }
- System.out.println(answers.get(s).getText());
- }
- if (faultQuestion.isEmpty() || faultQuestion == "") {
- messageBar.setText("恭喜你全部答对啦!真是个天才!");
- saveButton.setVisible(false);
- } else {
- messageBar.setText("很遗憾,你的第" + faultQuestion + "题答错了.正确答案分别是:" + correctAnswer);
- saveButton.setVisible(true);
- }
- }
- });
- panelMain.add(sudmitButton);
- break;
- }
- case 1: {
- for (int m = 0; m < num; m++) {
- JLabel questionBar = new JLabel(" ");
- panelMain.add(questionBar);
- questionBar.setText(questions.get(m)[0] + "=" + questions.get(m)[1]);
- }
- break;
- }
- default:
- }
- } else {
- messageBar.setText("请输入数字!");
- }
- }
- });
- panelConfig.add(buttonStart);
- }
4.判断输入合法性的函数。
- public static boolean isNumeric(String str) {
- Pattern pattern = Pattern.compile("[0-9]*");
- return pattern.matcher(str).matches();
- }
结果:
1.主界面:
2.答题模式:
3.全部答对时:
4.计算结果有误时:
5.打印模式:
体会:
争论点:
1.打印方式 最初想法是逐个答题,答一道提交一道,然后再出下一道题;因为对用户不友好,故讨论新的展示方式;
2.判断对错 主要是关于如何保存题目以及对应的答案的探讨。
花费时间较长的问题:排版(Layout)问题。
简易四则运算生成程序——添加GUI支持的更多相关文章
- 为OLED屏添加GUI支持6:进度条控件
为OLED屏添加GUI支持6:进度条控件 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:S ...
- 为OLED屏添加GUI支持3:字库
为OLED屏添加GUI支持3:字库 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:STM3 ...
- 为OLED屏添加GUI支持2:2D图形库
为OLED屏添加GUI支持2:2D图形库 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:S ...
- “四则运算生成程序——GUI支持和部分功能改进”链接
项目成员:张金生 张政 <正文随笔发布在张金生博客中> 四则运算生成程序——GUI支持和部分功能改进
- 四则运算生成程序——GUI支持和部分功能改进
项目成员:张金生 张政 工程地址: https://coding.net/u/jx8zjs/p/paperOne/git ssh://git@git.coding.net:jx8zjs/pap ...
- [Unity3D][Vuforia][IOS]vuforia在unity3d中添加自己的动态模型,识别自己的图片,添加GUI,播放视频
使用环境 unity3D 5 pro vuforia 4 ios 8.1(6.1) xcode 6.1(6.2) 1.新建unity3d工程,添加vuforia 4.0的工程包 Hierarchy中 ...
- 把自己Github上的代码添加Cocoapods支持
转载请注明原链接:http://www.cnblogs.com/zhanggui/p/6003481.html 一.前言 这两天被cocoapods折磨的心力憔悴.看cocoapods官网的添加支持, ...
- Spring Boot 添加Shiro支持
前言: Shiro是一个权限.会话管理的开源Java安全框架:Spring Boot集成Shiro后可以方便的使用Session: 工程概述: (工程结构图) 一.建立Spring Boot工程 参照 ...
- 在IntelliJ IDEA中添加框架支持时找不到Hibernate的解决办法
问题描述 第一次在Add Frameworks support界面中添加hibernate支持的时候,异常中断,导致没有成功添加. 第二次进入Add Frameworks support窗口时,发现找 ...
随机推荐
- Nginx中配置http和https做反向代理
参考:http://www.zslin.com/web/article/detail/73 1.安装 sudo apt-get install nginx 2.配置: http_demo.conf # ...
- 20155203 实验一《Java开发环境的熟悉》实验报告
20155203 实验一<Java开发环境的熟悉>实验报告 一.实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 二.练 ...
- 20155308 2016-2017-2《Java程序设计》课堂实践项目
20155308 2016-2017-2<Java程序设计>课堂实践项目 在java.lang包中有String.split()方法,返回是一个数组 我在应用中用到一些,给大家总结一下,仅 ...
- 20155321 2016-2017-2 《Java程序设计》第四周学习总结
20155321 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 第六.七章 继承 多态 接口 相应的语法细节 继承 关键字 extends 格式 class ...
- 20155338 2016-2017-2 《Java程序设计》第4周学习总结
20155338 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 内容有很多,这里这是选取几个比较重要的一部分来展示. 1.继承 •定义:继承基本上就是避免多 ...
- 深入浅出之-route命令实战使用指南
本博文的视频讲解已发布:http://oldboy.blog.51cto.com/2561410/1119453 缘起:本文为老男孩linux培训第七次课前考试题及参考答案,有朋友在看完http:// ...
- 基于ejabberd简单实现xmpp群聊离线消息
首先,xmpp服务器是基于ejabberd.离线消息模块是mod_interact,原地址地址:https://github.com/adamvduke/mod_interact: 修改后实现群聊离线 ...
- 强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods)
强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods) 学习笔记: Reinforcement Learning: An Introduction, Richa ...
- 一、初识 Django
一.引子 Django最初设计用于具有快速开发需求的新闻类站点,目的是要实现简单快捷的网站开发! 从好的方面来看,Web 开发激动人心且富于创造性:从另一面来看,它却是份繁琐而令人生厌的工作.通过减少 ...
- idea下增加scala
1 idea工具下,下载scala插件 2 idea下新建scala工程 File——New——module 如果按照上图,设置后点击下载,出现下图下载过慢情况下, 这里我选择了等待,大概等了半小时才 ...