基于java swing实现答题系统

时间:2021-09-21 09:35:12

本文实例为大家分享了java swing实现答题系统的具体代码,供大家参考,具体内容如下

基于java swing实现答题系统

如上图所示,代码亲测可用,如下:

  1. import java.awt.BorderLayout; 
  2. import java.awt.Color; 
  3. import java.awt.GridLayout; 
  4. import java.awt.event.ActionEvent; 
  5. import java.awt.event.ActionListener; 
  6. import java.awt.event.KeyEvent; 
  7. import java.awt.event.KeyListener; 
  8. import java.util.ArrayList; 
  9. import java.util.List; 
  10. import java.util.Random; 
  11.   
  12. import javax.swing.JButton; 
  13. import javax.swing.JFrame; 
  14. import javax.swing.JLabel; 
  15. import javax.swing.JPanel; 
  16. import javax.swing.JTextField; 
  17.   
  18. /** 
  19.  * 2017-01-09 
  20.  * @author Koow 
  21.  * 
  22.  */ 
  23. public class sa extends JFrame implements ActionListener, KeyListener { 
  24.  private JLabel title = null
  25.  private JButton submit = null
  26.  private JPanel center = null
  27.  // items用来跳转 
  28.  private int item1 = 0; 
  29.  private int item2 = 1; 
  30.  private int item3 = 2; 
  31.  private int item4 = 3; 
  32.  private JLabel[] FormulaLabels; // 用来存放表达式的各个项 
  33.  private List<String> allResult; // 用来存放随机出来的结果 
  34.  private JTextField[] userResults; // 用来让用户输入结果 
  35.  private JLabel[] judge; // 用来显示图标,以显示用户输入的结果是否正确 
  36.  private List<String> inputResults = null// 可以不要 
  37.  private JTextField scoreField = null
  38.  private int textCount = 1; // 用来记录当前焦点的位置 
  39.    
  40.  public static void main(String[] args){ 
  41.   sa s=new sa(); 
  42.     
  43.  } 
  44.   
  45.  public sa() { 
  46.   // TODO Auto-generated constructor stub 
  47.   inputResults = new ArrayList<String>(); 
  48.   // 实例化 
  49.   title = new JLabel("题目很简单,认真答哦!~(每题1分,答对加1分,答错不扣分!)"); 
  50.   submit = new JButton("提交"); 
  51.   submit.addActionListener(this); 
  52.   GridLayout layout = new GridLayout(21, 6); 
  53.   center = new JPanel(layout); 
  54.   // 调用方法实例化方法 
  55.   initLables(); 
  56.   initUserRestult(); 
  57.   initJudge(); 
  58.   // 将各项填入到center面板(GridLayout) 
  59.   int count = 1; 
  60.   int formulaCount = 0; 
  61.   int userResultsCount = 0; 
  62.   int judgeCount = 0; 
  63.   while (count <= 120) { 
  64.    // 判断count%6,确定要填哪个组件 
  65.    if (count % 6 == 1 || count % 6 == 2 || count % 6 == 3 || count % 6 == 4) { 
  66.     center.add(FormulaLabels[formulaCount]); 
  67.     formulaCount++; 
  68.    } else if (count % 6 == 5) { 
  69.     center.add(userResults[userResultsCount]); 
  70.     userResultsCount++; 
  71.    } else if (count % 6 == 0) { 
  72.     center.add(judge[judgeCount]); 
  73.     judgeCount++; 
  74.    } 
  75.    count++; 
  76.   } 
  77.   center.add(new JLabel()); 
  78.   center.add(new JLabel()); 
  79.   center.add(new JLabel("总分:")); 
  80.   scoreField = new JTextField(); 
  81.   scoreField.setEditable(false); 
  82.   center.add(scoreField); 
  83.   center.add(new JLabel()); 
  84.   center.add(new JLabel()); 
  85.   this.add(center, BorderLayout.CENTER); 
  86.   // 添加组件 
  87.   this.add(submit, BorderLayout.SOUTH); 
  88.   this.add(title, BorderLayout.NORTH); 
  89.   // 显示 
  90.   this.setLocation(400, 10); 
  91.   this.setVisible(true); 
  92.   this.setSize(500, 700); 
  93.   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
  94.   this.setTitle("简单测试系统"); 
  95.   try { 
  96.    Thread.sleep(500); 
  97.   } catch (InterruptedException e) { 
  98.    // TODO Auto-generated catch block 
  99.    e.printStackTrace(); 
  100.   } 
  101.   userResults[0].requestFocus(); 
  102.  } 
  103.   
  104.  /** 
  105.   * 这个方法用来初始化算式各项的数组 
  106.   */ 
  107.  private void initLables() { 
  108.   int sum; 
  109.   int firstNumber; 
  110.   int secondNumber; 
  111.   allResult = new ArrayList<String>(); 
  112.   // 建立算式标签 
  113.   this.FormulaLabels = new JLabel[80]; 
  114.   // 将数组中的每一个标签都实例化 
  115.   for (int i = 0; i < 80; i++) { 
  116.    FormulaLabels[i] = new JLabel(); 
  117.   } 
  118.   // 将表达式各项赋值内容,并将随机数的和算出结果存入Arraylist中,以便后期核对结果使用  
  119.   while (item4 < 80) { 
  120.    firstNumber = new Random().nextInt(99) + 1; 
  121.    FormulaLabels[item1].setText(String.valueOf(firstNumber)); 
  122.    FormulaLabels[item2].setText("+"); 
  123.    secondNumber = new Random().nextInt(99) + 1; 
  124.    FormulaLabels[item3].setText(String.valueOf(secondNumber)); 
  125.    FormulaLabels[item4].setText("="); 
  126.    sum = firstNumber + secondNumber; 
  127.    allResult.add(String.valueOf(sum)); 
  128.    item1 += 4; 
  129.    item2 += 4; 
  130.    item3 += 4; 
  131.    item4 += 4; 
  132.   } 
  133.   // for(int i=0;i<80;i++){ 
  134.   // System.out.println(FormulaLabels[i].getText()); 
  135.   // } 
  136.  } 
  137.   
  138.  /** 
  139.   * 这个方法用来实例化userResults数组,并实例化里面的每一个JTextField 
  140.   */ 
  141.  private void initUserRestult() { 
  142.   userResults = new JTextField[20]; 
  143.   for (int i = 0; i < 20; i++) { 
  144.    userResults[i] = new JTextField(); 
  145.    userResults[i].setSize(20, 20); 
  146.    // 后加的监听 
  147.    userResults[i].addKeyListener(this); 
  148.   } 
  149.  } 
  150.   
  151.  /** 
  152.   * 这个方法用来实例化judge数组,并将里面的每一个Label实例化 
  153.   */ 
  154.  private void initJudge() { 
  155.   judge = new JLabel[20]; 
  156.   for (int i = 0; i < 20; i++) { 
  157.    judge[i] = new JLabel("好好算呦"); 
  158.   } 
  159.  } 
  160.   
  161.  // 实现监听方法,当用户点击提交后要做的事情 
  162.  @Override 
  163.  public void actionPerformed(ActionEvent arg0) { 
  164.   // TODO Auto-generated method stub 
  165.   int score = 0; 
  166.   for (int i = 0; i < 20; i++) { 
  167.    // 将用户输入的结果全部获取,存入一个ArrayList中,可以不要 
  168.    inputResults.add(userResults[i].getText().toString().trim()); 
  169.    System.out.println(userResults[i].getText().toString()); 
  170.    // 取出来用户输入的答案和之前算好的结果去比较,不对就把后面的标签设置为回答错误, 
  171.    // 如果正确就设置为回答正确 
  172.    String result = userResults[i].getText().toString().trim(); 
  173.    if (result.equals(allResult.get(i))) { 
  174.     judge[i].setText("回答正确"); 
  175.     judge[i].setForeground(Color.RED); 
  176.     score++; 
  177.    } else { 
  178.     judge[i].setText("回答错误"); 
  179.     judge[i].setForeground(Color.GREEN); 
  180.    } 
  181.   } 
  182.   scoreField.setText(String.valueOf(score)); 
  183.  } 
  184.   
  185.  @Override 
  186.  public void keyPressed(KeyEvent e) { 
  187.   // TODO Auto-generated method stub 
  188.   if (e.getKeyCode() == KeyEvent.VK_ENTER) { 
  189.    userResults[textCount].requestFocus(); 
  190.    if (textCount < 19) { 
  191.     textCount++; 
  192.    } 
  193.   } 
  194.  } 
  195.   
  196.  @Override 
  197.  public void keyTyped(KeyEvent e) { 
  198.   // TODO Auto-generated method stub 
  199.   
  200.  } 
  201.   
  202.  @Override 
  203.  public void keyReleased(KeyEvent e) { 
  204.   // TODO Auto-generated method stub 
  205.   
  206.  } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://blog.csdn.net/u012934723/article/details/54294713