Practice Every Day_4

今天看了看io流部分的内容,仿照书上写了个小例子,读取一个文件,并在Frame中显示以及进行一系列操作。以下是代码:

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class SingleSelect {
 public static void main(String[] args)
    {
  MyWindow my=new MyWindow("英语四级单选");
  my.validate();
 }
}
class MyWindow extends Frame implements ActionListener,ItemListener
{
  Label l1=new Label("题目"); 
  Label l2=new Label("选择答案");
  Label l3=new Label("您的得分");                     效果图:
  Button b1=new Button("开始练习");
  Button b2=new Button("下一题");
  TextField t1=new TextField(80);
  TextField t2=new TextField(50);
  Checkbox check[];
  FileReader file;
  BufferedReader bufr;
  String str[]=new String[7],s;//str[]数组用来存储题目以及选项和正确答案,s用来存储读取的一行字符
  CheckboxGroup age=new CheckboxGroup();//建立一个Checkbox组,CheckboxGroup 中的复选框按钮可以在任意给定的时间处于 "on" 状态。按下任何按钮,可将按钮状态设置为 "on",并且强制将任何其他 "on" 状态的按钮更改为 "off" 状态。 
  static int score=0;
  MyWindow(String s)
  { 
  check=new Checkbox[5];
  for(int i=0;i<=4;i++)
    {
      check[i]=new Checkbox("",false,age);//在CheckboxGroup中每个Checkbox的状态为false
      check[i].addItemListener(this);
    }
  b1.addActionListener(this);
  b2.addActionListener(this);
  setBounds(100,100,700,300);
  setVisible(true);
  addWindowListener(new WindowAdapter()
  {
  public void windowClosing(WindowEvent e) 
  { 
   System.exit(0);
  } 
  });
  try{
   file=new FileReader("f:English.txt");
   bufr=new BufferedReader(file);
  }
  catch(IOException e){}
  Box box=Box.createVerticalBox();
  Panel p1=new Panel(),p2=new Panel(),p3=new Panel(),p4=new Panel();
  p1.add(l1);p1.add(t1);
  p2.add(l2);
  for(int i=0;i<=4;i++)
   {
       p2.add(check[i]);
   }
  p3.add(l3);p3.add(t2);
  p4.add(b1);p4.add(b2);
  box.add(p1);box.add(p2);box.add(p3);box.add(p4);
  add(box,BorderLayout.CENTER);
 
  }
public void reading()
{
 int i=0;
 try{
    s=bufr.readLine();
    if(!(s.startsWith("end")))
     {
   StringTokenizer tokenizer=new StringTokenizer(s,"#");//以#为分隔符,读取字符
          while(tokenizer.hasMoreTokens())//如果s中分隔符后边还有字符则返回true
          {
          str[i]=tokenizer.nextToken();//将每个分隔符后边的字符赋给str[i]
          i++;
          }
       t1.setText(str[0]);
       for(int j=1;j<=4;j++)
       {
     check[j-1].setLabel(str[j]);
       }
    check[4].setLabel("空选项");
     }
    else
    {
    t1.setText("学习完毕");
    for(int j=0;j<=3;j++)
    {
     check[j].setLabel("end");
     bufr.close();
     file.close();
    }
    
    }
    }
 catch(Exception exp){t1.setText("无试题文件");}
}
public void actionPerformed(ActionEvent e)
{
 if(e.getSource()==b1)
 {
   
 score=0;
 t2.setText(String.valueOf(score));
 reading();
 try
 {
  file=new FileReader("f:Enlish.txt");
  bufr=new BufferedReader(file);
 }
 catch(IOException exp){}
 reading();
 }
 if(e.getSource()==b2) 
 {
   reading();
   for(int j=0;j<5;j++)
   {
    check[j].setEnabled(true);
   }
 }
}
public void itemStateChanged(ItemEvent e)
 {
  for(int j=0;j<5;j++)
  {
   if(check[j].getLabel().equals(str[5])&&check[j].getState())
   {
    score++;
    t2.setText(String.valueOf(score));
  
   }   
   
  }
  for(int j=0;j<5;j++)
  {
         check[j].setState(false);
  }
 }
}

其实,这个程序中有几个问题未解决,第一题即使对了也不记分,而且在计数上也存在问题,答对的个数总和显示的不一致。可能是对setState()和setEnabled()的功能不熟悉。好吧,有再优化改进一下!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值