要求:用户界面新增支持 Windows GUI,同时保留原有命令行下所有功能。提示: 先测试驱动开发,然后重构代码,以GUI为目标修改"核心"函数,把与GUI/Console相关的部分提取出来
在原来实现四则运算的基础上通过java中的Swing组件实现了GUI版本
GUI的实现代码如下

public class CalMachineSwingBuild extends JFrame {

    private JPanel contentPane;
private JComboBox comboBox;
private JLabel lblNewLabel;
private JTextField textField;
private JLabel lblNewLabel_1;
private ArrayList<String> questionList=new ArrayList<String>();
private ArrayList<JTextField> answersByUser = new ArrayList<JTextField>(); //存放用户填写的答案的文本域
private ArrayList<String> RealAnswerList=new ArrayList<String>(); //存放真正的答案
private String strAnswerAndResult[]=new String[2];
private JLabel label_1;
private JLabel lblNewLabel_3;
private JButton submitButton;
private JPanel panelNorth;
private JPanel panelCenter;
private JPanel panelSouth;
private static int numOfQuestion; //问题的数量
private String itemValue; //难度级别
private String recordWrong=" ";
private String userName;
private int countWrong=0;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
CalMachineSwingBuild frame = new CalMachineSwingBuild();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
} /**
* Create the frame.
*/
public CalMachineSwingBuild() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 800, 600);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout(0, 0));
panelNorth=new JPanel();
JLabel label = new JLabel("难度值");
label.setBounds(10, 10, 42, 15);
panelNorth.add(label);
//contentPane.add(label); comboBox = new JComboBox();
comboBox.addItem("简单");
comboBox.addItem("普通");
comboBox.addItem("复杂");
comboBox.setBounds(62, 7, 50, 100);
comboBox.setEditable(false);
comboBox.setSize(60, 20);
panelNorth.add(comboBox);
// contentPane.add(comboBox); lblNewLabel = new JLabel("题目数量");
lblNewLabel.setBounds(144, 10, 62, 15);
panelNorth.add(lblNewLabel);
// contentPane.add(lblNewLabel); textField = new JTextField();
textField.setBounds(216, 7, 46, 21);
// contentPane.add(textField);
textField.setColumns(10);
panelNorth.add(textField); JButton btnNewButton = new JButton("开始出题");
btnNewButton.setBounds(272, 6, 93, 23);
/* labelForSpec=new JLabel();
panelNorth.add(labelForSpec);*/
panelNorth.add(btnNewButton);
contentPane.add(panelNorth,BorderLayout.NORTH); panelSouth=new JPanel();
lblNewLabel_1 = new JLabel(); //用作提示
submitButton = new JButton("提交答案");//提交按钮
panelSouth.add(lblNewLabel_1);
panelSouth.add(submitButton);
contentPane.add(panelSouth,BorderLayout.SOUTH); panelCenter=new JPanel();
contentPane.add(panelCenter,BorderLayout.CENTER);
panelCenter.setLayout(new MigLayout("", "[][grow]", "[][]")); btnNewButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent event) {
repaint(); //重新展示界面
panelCenter.removeAll();
questionList.clear();
answersByUser.clear();
Pattern pattern = Pattern.compile("^+?[1-9][0-9]*$");
Matcher isNum = pattern.matcher(textField.getText());
if(!isNum.matches()){
lblNewLabel_1.setText("输入的题目数必须为整数!");
}else{
lblNewLabel_1.setText("");
itemValue=(String) comboBox.getSelectedItem();
numOfQuestion=Integer.parseInt(textField.getText());
CalMachine cm=new CalMachine();
CalculateMachine04 cm04=new CalculateMachine04();
switch(itemValue){
case "简单":
questionList=(ArrayList<String>) cm.addBracketTest(numOfQuestion); for(int i=0;i<questionList.size();i++){
JLabel questionBar = new JLabel();
panelCenter.add(questionBar, "cell 0 " + i + ",alignx trailing");
JTextField answerBar = new JTextField("", 10);
panelCenter.add(answerBar, "cell 1 " + i + " ,alignx trailing");
strAnswerAndResult=questionList.get(i).split("="); //前者为问题,后者为答案
questionBar.setText("question"+(i+1)+": "+strAnswerAndResult[0]);
RealAnswerList.add(strAnswerAndResult[1]); //存放真正的答案
answersByUser.add(answerBar);
}
break;
case "普通":
questionList=(ArrayList<String>) cm.generateSimpleQuestion(numOfQuestion);
for(int i=0;i<questionList.size();i++){
JLabel questionBar = new JLabel();
panelCenter.add(questionBar, "cell 0 " + i + ",alignx trailing");
JTextField answerBar = new JTextField("", 10);
panelCenter.add(answerBar, "cell 1 " + i + " ,alignx trailing");
strAnswerAndResult=questionList.get(i).split("="); //前者为问题,后者为答案
questionBar.setText("question"+(i+1)+": "+strAnswerAndResult[0]);
RealAnswerList.add(strAnswerAndResult[1]); //存放真正的答案
answersByUser.add(answerBar);
}
break;
case "复杂":
questionList=(ArrayList<String>) cm04.generateComplexQuestion(numOfQuestion);
for(int i=0;i<questionList.size();i++){
JLabel questionBar = new JLabel();
panelCenter.add(questionBar, "cell 0 " + i + ",alignx trailing");
JTextField answerBar = new JTextField("", 10);
panelCenter.add(answerBar, "cell 1 " + i + " ,alignx trailing");
strAnswerAndResult=questionList.get(i).split("="); //前者为问题,后者为答案
questionBar.setText("question"+(i+1)+": "+strAnswerAndResult[0]);
RealAnswerList.add(strAnswerAndResult[1]); //存放真正的答案
answersByUser.add(answerBar);
}
break;
}
System.out.println();
}
}
});
//提交判断
submitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) { for(int i=0;i<numOfQuestion;i++){
if(!answersByUser.get(i).getText().trim().equals(RealAnswerList.get(i))){
//用户答错了
recordWrong+=(i+1)+",";
countWrong++;
}
}
if(recordWrong.length()>1){
lblNewLabel_1.setText("第"+recordWrong+"题答错了!");
}else if(textField.getText().length()==0){
lblNewLabel_1.setText("请输入题数!");
} else{
lblNewLabel_1.setText("恭喜你,全都搭对了!");
} /* if(e.getSource()==submitButton){
System.out.println("点击了"+itemValue);
new CalMachineSwingBuildResult(userName,itemValue,numOfQuestion
,countWrong,numOfQuestion-countWrong).show();;
}*/ recordWrong=""; }
});
} }

运行界面如下:

ssh:git@git.coding.net:muziliquan/GUIVersion.git

git:git://git.coding.net/muziliquan/GUIVersion.git

四则运算GUI版本的更多相关文章

  1. 四则运算GUI版本功能展现

    对于四则运算的GUI版本实现支持批量出题,由于我的不积极导致教师没找到对应的连接,现在重新补上链接 http://www.cnblogs.com/liquan/p/5978687.html codin ...

  2. Mac下好用的编辑器VIM GUI版本 VimR 推荐

    vim号称是编辑器之神,轮其功能和扩展性的确少有编辑器能比,但是大多数编辑器都有的文件浏览功能它确没有,虽然有些插件可以实现,但用起来都不是很方便,偶然发现了一个GUI版本的VIM,与普通的GUI版本 ...

  3. python猜数字GUI版本V0.2

    使用类方式编写猜数字游戏GUI版本. 思路:初始化数字以及初始化wegdits,编写button click event判断代码的函数,每猜一次点击button调用一次该函数,并计算猜的次数.如果猜对 ...

  4. Appium(二):Node.js下载与安装、非GUI版本appium下载与安装、GUI版本appium下载与安装

    1. 下载并安装Node.JS 进入官网:https://nodejs.org/en/. 由于我们是新手嘛,所以肯定是越稳定越好啦,所以选择下载LTS版本. 进入文件下点击文件就进入安装界面了,点击n ...

  5. GUI版本的emacs

    概要 emacs 配置 X11 配置 输入法配置 spacemacs 中的配置 fcitx 汉字显示方块的问题 总结 优势 劣势 概要 之前一直使用 terminal 版本的 emacs, 性能和显示 ...

  6. 结对编程四则运算gui

    码市地址:https://git.coding.net/linzhao/sizeyunsuangui.git 林 钊 -- 201421123105 吴世荣 -- 201421123119 王坤彬 - ...

  7. 四则运算GUI

    一.题目描述 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac.Linux,web,手机上的),成 ...

  8. 四则运算GUI版

    小学四则运算界面版 李永豪 201421123117 郑靖涛 201421123114 coding 地址:https://git.coding.net/ras/work2.git 一.题目描述 我们 ...

  9. 结对编程1.四则运算GUI版

    201421123022 王若凡        201421123026  欧阳勇 coding详细代码 a.需求分析: 这个程序做成GUI(可以是Windows PC 上的,也可以是Mac.Linu ...

随机推荐

  1. 位与(&)常用编程技巧

    补充知识:1)正整数的补码与原码相同:                2)求负整数的补码:原码 符号位不变,数值位各位取反,最后整个数加1得到补码:                3)按位与& ...

  2. Fiddler-007-修改HTTP请求响应数据

    前文简述了如何通过 Fiddler 修改 HTTP请求 的请求参数,详情请参阅:Fiddler-006-修改HTTP请求参数. 在进行 App 测试时,经常需要修改请求参数,以获得不同的显示效果,以查 ...

  3. mysql怎么终止当前正在执行的sql语句

    mysql怎么终止当前正在执行的sql语句 show processlist; kill 要杀的ID kill 7

  4. Epoll模型详解

    Linux 2.6内核中提高网络I/O性能的新方法-epoll I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数. 1.为什么select落后    首先,在Lin ...

  5. 一表格简单明了区分BI和大数据

    大数据和BI两词现阶段处于刷屏状况,但是,很多人对于这两词确傻傻分不清.改怎么区别呢?本文将从概念.应用.发展趋势等多个角度对大数据和BI进行区分. BI(Business Intelligence) ...

  6. Android --固定底部

    相对布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns: ...

  7. MySQL Server 5.6 配置文件my.ini 以及windows上mysql表名区分大小写

    MySQL Server 5.6的配置文件my.ini的位置跟以往有所不同: 我的是在:C:\ProgramData\MySQL\MySQL Server 5.6\my.ini 前两天导sql 导完之 ...

  8. 配置和使用buffer cache

    存放从磁盘读取的数据.排序和并行读不会使用buffer cache 可以从v$db_cache_advice或者buffer cache的命中率来检查buffer cache设置是否合理 查看v$db ...

  9. 理解MapReduce

    理解MapReduce Hadoop的MapReduce过程具有如下形式:           1) map: (K1, V1) => list(K2, V2)          2) redu ...

  10. wampserver,eclipse,PHPeclipse搭建php开发环境

    使用wampserver,安装wampserver后: 1,)进入mysql console,修改mysql密码: 2,) 修改D:\wamp\apps\phpmyadmin3.4.10.1\conf ...