要求:用户界面新增支持 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. 1057 N的阶乘

    1057 N的阶乘 基准时间限制:1 秒 空间限制:131072 KB 输入N求N的阶乘的准确值. Input 输入N(1 <= N <= 10000) Output 输出N的阶乘 Inp ...

  2. grunt构建前端自动化

    一.grunt是基于nodejs的,所以首先我们需要安装node 二.全局安装grunt 可以参考 http://www.gruntjs.net/docs/getting-started/ 进行安装. ...

  3. The Beginner’s Guide to iptables, the Linux Firewall

    Iptables is an extremely flexible firewall utility built for Linux operating systems. Whether you’re ...

  4. ecshop transport.js 和 jquery 冲突解决办法

    您提供一个简单的解决transport.js 和 jquery 方法: 在 page_header.lbi 库文件中加入如下代码,注意操作顺序: 1.先导入transport.js  文件 {inse ...

  5. Four Operations---hdu5938(暴力)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5938 题意:给一个不超过20位并且大于2位的数字字符串(只包含1-9)然后找到适当的位置依次放入&qu ...

  6. webKit和chromium的文章地址

     http://blog.csdn.net/column/details/yongsheng.html?&page=1 

  7. C#中jQuery Ajax实例(一)

    目标:在aspx页面输入两参数,传到后台.cs代码,在无刷新显示到前台 下面是我的Ajax异步传值的第一个实例 1.前台html代码: <html xmlns="http://www. ...

  8. synzhronized原理3

    1.java中的每个对象都可作为锁,有三种表现形式: 对于普通方法,锁的是当前this对象. 对于静态方法,锁的是class对象 对于方法块,锁的是synchronized指定的对象. 2.JVM基于 ...

  9. jquery 日历插件datepicker格式调整

    <script> $(function() { $("#datepicker").datepicker({ dateFormat: "yy/mm/dd&quo ...

  10. axis2 WebService的发布与调用

    1:准备:    JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk6downloads-1902814.html    e ...