GUI答题程序

记录一下第一个GUI大程序,也是因为临近交作业的时候才临时抱佛脚,人的潜能总是无限的,因为时间紧而且很多知识都是刚学的,运用不太熟练,多见谅,以后有机会再优化一下代码,这里就放上主要代码(代码不全),若有兴趣可联系。

package ansapp;

import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Vector;

public class startDemo extends JFrame implements ActionListener {
    public startpanel spanel;
    public JPanel panel1,panel2,panel3;
    JLabel label;
    JButton btn1,next,pre,commit;
    JTextArea textArea;
    JRadioButton abtn,bbtn,cbtn,dbtn;
    ButtonGroup buttonGroup;
    protected data[] questions;
    protected int qnum, now;
     startDemo()
     {
         setVisible(true);
         this.setSize(440,320);                                           //设置窗口大小
         this.setLocationRelativeTo(null);
        setTitle("思政答题系统");
         setResizable(false);
         setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
         //Container container = new Container();
         spanel = new startpanel();
         btn1 = new JButton();
         btn1.setText("开始测试");
         btn1.setBounds(160,200,80,60);
         btn1.addActionListener(this); //添加监听事件
         spanel.add(btn1);
         add(spanel, BorderLayout.CENTER);
         /
         panel1 =new JPanel();
         panel2 = new JPanel();
         panel3 = new JPanel();
         label = new JLabel("测试总时间30分钟");
          textArea = new JTextArea(20,30);
          textArea.setLineWrap(true);
         textArea.setEnabled(false);
         abtn =  new JRadioButton("A");//初始化单选按钮
         bbtn =  new JRadioButton("B");
         cbtn =  new JRadioButton("C");
         dbtn =  new JRadioButton("D");
         abtn.addActionListener(this);  //添加监听事件
         bbtn.addActionListener(this);
         cbtn.addActionListener(this);
         dbtn.addActionListener(this);
         buttonGroup = new ButtonGroup();
         buttonGroup.add(abtn);
         buttonGroup.add(bbtn);
         buttonGroup.add(cbtn);
         buttonGroup.add(dbtn);
         panel1.add(label);
         panel2.add(textArea);
         panel3.add(abtn);
         panel3.add(bbtn);
         panel3.add(cbtn);
         panel3.add(dbtn);
         pre =new JButton("上一题");
         next = new JButton("下一题");
         commit = new JButton("提交");
         pre.addActionListener(this);  //添加监听事件
         next.addActionListener(this);
         commit.addActionListener(this);
         panel3.add(pre);
         panel3.add(next);
         panel3.add(commit);
     }
     public void createst()   //读入试题
     {
         Vector<data> qList=null;//创建一个向量列表,用于动态增加试题
         data qt;
         String s,que="";
         try{
             FileReader fr = new FileReader("/Users/guyaning/IdeaProjects/javatest/src/data.txt");
             BufferedReader br = new BufferedReader(fr);
             qList = new Vector<data>();
             while((s=br.readLine())!=null)
             {
                 if(s.equals("***"))
                 {
                     s=br.readLine();
                     while(!s.equals("@@@"))
                     {
                         que = que+s+'\n';
                         s = br.readLine();
                     }
                 }
                 if(s.equals("@@@"))
                 {
                     s = br.readLine();
                     qt = new data(que,s);
                     que="";
                     qList.add(qt);
                 }
             }
             br.close();
             fr.close();
         }catch (IOException e)
         {
             e.printStackTrace();
         }
         qnum = qList.size();    //统计题目数目
         questions = new data[qnum];
         for(int i=0;i<qnum;i++)   //放入到试题列表中
         {
             questions[i] = qList.get(i);
         }
     }
    public void showquestion()
    {
        textArea.setText("");
        textArea.append(questions[now].getQuestion());
        setSelected(questions[now].getAns());
    }
    public static void main(String[] args) {
        new startDemo();
    }
    public void setSelected(String s) {//设置单选按钮不重复模块
        if (s.equals("A")) buttonGroup.setSelected(abtn.getModel(), true);
        if (s.equals("B")) buttonGroup.setSelected(bbtn.getModel(), true);
        if (s.equals("C")) buttonGroup.setSelected(cbtn.getModel(), true);
        if (s.equals("D")) buttonGroup.setSelected(dbtn.getModel(), true);
        if (s.equals("")) buttonGroup.clearSelection();
    }
    public void showScore()
    {
        int right=0;
        for(int i=0;i<qnum;i++)
        {
            if(questions[i].check())
                right++;
        }
        int score = (int )(right*100/qnum);
        JOptionPane.showMessageDialog(null, "答对"+right+"题,分数为"+score);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
         if(e.getSource()==btn1){
             createst();
             for(int i=0;i<qnum;i++)
             {
                 System.out.print(questions[i].getQuestion());
             }
             now =0;
             showquestion();
             remove(spanel);
             this.add(panel1,BorderLayout.NORTH);
             this.add(panel2,BorderLayout.CENTER);
             this.add(panel3,BorderLayout.SOUTH);
             pre.setEnabled(false);
             repaint();
             validate();
         }
         if(e.getSource()==abtn)  questions[now].setAns("A");//选项按钮事件
         if(e.getSource()==bbtn) questions[now].setAns("B");
         if(e.getSource()==cbtn) questions[now].setAns("C");
         if(e.getSource()==dbtn) questions[now].setAns("D");
         if(e.getSource()==pre)
         {
             now--;
             if(now==qnum-2) next.setEnabled(true);
             if(now==0) {
                 pre.setEnabled(false);
             }
             showquestion();
         }
         if(e.getSource()==next)
         {
             now++;
             if(now==1) pre.setEnabled(true);
             if(now==qnum-1) {
                 next.setEnabled(false);
             }
             showquestion();
         }
         if(e.getSource()==commit)
         {
                showScore();
             commit.setEnabled(false);
             System.exit(0);          //退出
         }
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值