四则运算GUI版本
要求:用户界面新增支持 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版本的更多相关文章
- 四则运算GUI版本功能展现
		对于四则运算的GUI版本实现支持批量出题,由于我的不积极导致教师没找到对应的连接,现在重新补上链接 http://www.cnblogs.com/liquan/p/5978687.html codin ... 
- Mac下好用的编辑器VIM GUI版本 VimR 推荐
		vim号称是编辑器之神,轮其功能和扩展性的确少有编辑器能比,但是大多数编辑器都有的文件浏览功能它确没有,虽然有些插件可以实现,但用起来都不是很方便,偶然发现了一个GUI版本的VIM,与普通的GUI版本 ... 
- python猜数字GUI版本V0.2
		使用类方式编写猜数字游戏GUI版本. 思路:初始化数字以及初始化wegdits,编写button click event判断代码的函数,每猜一次点击button调用一次该函数,并计算猜的次数.如果猜对 ... 
- Appium(二):Node.js下载与安装、非GUI版本appium下载与安装、GUI版本appium下载与安装
		1. 下载并安装Node.JS 进入官网:https://nodejs.org/en/. 由于我们是新手嘛,所以肯定是越稳定越好啦,所以选择下载LTS版本. 进入文件下点击文件就进入安装界面了,点击n ... 
- GUI版本的emacs
		概要 emacs 配置 X11 配置 输入法配置 spacemacs 中的配置 fcitx 汉字显示方块的问题 总结 优势 劣势 概要 之前一直使用 terminal 版本的 emacs, 性能和显示 ... 
- 结对编程四则运算gui
		码市地址:https://git.coding.net/linzhao/sizeyunsuangui.git 林 钊 -- 201421123105 吴世荣 -- 201421123119 王坤彬 - ... 
- 四则运算GUI
		一.题目描述 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac.Linux,web,手机上的),成 ... 
- 四则运算GUI版
		小学四则运算界面版 李永豪 201421123117 郑靖涛 201421123114 coding 地址:https://git.coding.net/ras/work2.git 一.题目描述 我们 ... 
- 结对编程1.四则运算GUI版
		201421123022 王若凡 201421123026 欧阳勇 coding详细代码 a.需求分析: 这个程序做成GUI(可以是Windows PC 上的,也可以是Mac.Linu ... 
随机推荐
- c#导出excel(转)
			C#导出Excel文件实例代码 2010-08-03 14:10:36| 分类: 软件编程 | 标签:excel c#导出excel |字号大中小 订阅 /// <summary> ... 
- golang  AES/ECB/PKCS5  加密解密  url-safe-base64
			因为项目的需要用到golang的一种特殊的加密解密算法AES/ECB/PKCS5,但是算法并没有包含在标准库中,经过多次失败的尝试,终于解码成功,特此分享: /* 描述 : golang AES/EC ... 
- 解决在.ashx文件中判断Session 总是NULL的方法
			实现IHttpHandler接口的同时必须继承IRequiresSessionState接口,才能拿到session public class HttpHandler: IHttpHandler, I ... 
- 开发报表时将已有User做成下拉列表,第一项为label为ALL,value为null
			SELECT 'All' AS LABLE_NAME, NULL AS USER_NAMEUNION ALLSELECT USER_NAME AS LABLE_NAME, USER_NAME from ... 
- mac下安装使用svn
			mac自带了svn服务端和客户端,所以只需要简单配置一下就可以使用 转自 http://blog.sina.com.cn/s/blog_677fb16e01011i6l.html 1.创建svn ... 
- logstash
			logstash作为数据搜集器,主要分为三个部分:input->filter->output 作为pipeline的形式进行处理,支持复杂的操作,如发邮件等 input配置数据的输入和简 ... 
- win7系统中ftp服务器搭建方法(多图)
			一.创建FTP站点 1.打开:控制面板---系统和安全---管理工具---Internet 信息服务 2. 建站:右键点击网站---添加FTP站点 3. 输入FTP 站点名称---选择你的 FTP 目 ... 
- 修改seacherbar 取消按钮属性
			继承UISearchBar. 重载setShowCancelButton. [super xxx]; ... for (UIView *subview in self.subview) { if ... 
- Declare Cusror of SQLServer
			Defines the attributes of a Transact-SQL server cursor, such as its scrolling behavior and the query ... 
- ucenter 客户端里的自动方法
			<?php /** * UCenter 应用程序开发 Example * * UCenter 简易应用程序,应用程序有自己的用户表 * 使用到的接口函数: * uc_authcode() 可选, ... 
