zoukankan      html  css  js  c++  java
  • 四则运算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

  • 相关阅读:
    ABAP 程序中的类 沧海
    ABAP类的方法(转载) 沧海
    More than 100 ABAP Interview Faq's(2) 沧海
    SAP and ABAP Memory总结 沧海
    ABAP Frequently Asked Question 沧海
    ABAP System Reports(Additional functions) 沧海
    ABAP Questions Commonly Asked 1 沧海
    ABAP Tips and Tricks 沧海
    ABAP System Fields 沧海
    ABAP 面试问题及答案(一):数据库更新及更改 SAP Standard (转) 沧海
  • 原文地址:https://www.cnblogs.com/liquan/p/5978687.html
Copyright © 2011-2022 走看看