• 四则运算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

  • 相关阅读:
    20180420首旅酒店的操作记录
    股票的站上均线和反弹购买的学习
    linux里面的fork函数创建一个新进程
    allegro导入网表过程中出现的错误信息
    海思NB-IOT的SDK添加AT指令方法
    如何在ubuntun中安装pycharm并将图标显示在桌面上
    流畅python学习笔记:第十九章:动态属性和特性
    一起来学linux:目录与路径
    一起来学linux:用户与用户组
    python自动化运维五:pexpect
  • 原文地址:https://www.cnblogs.com/liquan/p/5978687.html
Copyright © 2020-2023  润新知