网上和论坛都找了,没一个能确切的说出问题的所在,所以我就重提一下了,希望有人能真正解释解释,好让我们这些新手能继续学下去!!!
我的程序的这样的,居然有95个变量没有定义的错误,有兴趣的可以看看!!!
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
class FileName implements FilenameFilter //
{
String str=null;
FileName(String s)
{
str=" . "+s;
}
public boolean accept(File dir,String name)
{
return name.endsWith(str);
}
}
public class TestArea extends JPanel implements ActionListener,ItemListener,Runnable
{
Choice list=null; //
JTextArea 试题显示区=null,消息区=null;
JcheckBox box[];
JButton 提交该题答案,读取下一题,查看分数; //
ReadTestquestion 读取试题=null; //
JLabel welcomeLabel=null; //
Thread countTime=null; //
long time=0; //
JTextField timeShow=null; //
boolean 是否关闭计时器=false,是否暂停计时器=false;
JButton 暂停或继续计时=null;
public TestArea()
{
list=new Choice();
//
String 当前目录=System.getProperty("user.dir");
File dir=new File(当前目录);
FileName fileTxt=new FileName("txt");
String fileName[]=dir.list(fileTxt); //
for(int i=0;i<fileName.length;i++)
{
list.add(fileName[i]);
}
试题显示区=new JTextArea(15,12);
试题显示区.setLineWrap(true); //
试题显示区.setWrapStyleWord(true); //
试题显示区.setFont(new Font("TimesRoman",Font.PLAIN,14));
试题显示区.setForeground(Color.blue);
消息区=new JTextArea(8,8);
消息区.setForeground(Color.blue);
消息区.setLineWrap(true);
消息区.setWrapStyleWord(true);
countTime=new Thread(this); //
String s[]=:"A","B","C","D"};
box=new JCheckBox[11];
for(int i=0;i<11;i++)
{
box[i]=new JCheckBox(s[i]);
}
暂停或继续计时=new JButton("暂停计时");
暂停或继续计时.addActionListener(this);
提交该题答案=new JButton("提交该题答案");
提交该题答案.setForeground(Color.blue);
读取下一题=new JButton("读取第一题");
读取下一题.setForeground(Color.blue);
查看分数=new JButton("查看分数");
查看分数.setForeground(Color.blue);
提交该题答案.setEnabled(false);
提交该题答案.addActionListener(this);
读取下一题.addActionListener(this);
查看分数.addActionListener(this);
list.addItemListener(this);
读取试题=new ReadTestquestion();
JPanel pAddbox=new JPanel();
for(int i=0;i<11;i++)
{
pAddbox.add(box[i]);
}
Box boxH1=Box.createVerticalBox(),boxH2=Box.createVerticalBox(),baseBox=Box.createHorizontalBox(); //
boxH1.add(new JLabel("选择试题文件"));
boxH1.add(list);
boxH1.add(new JScrollPane());
boxH1.add(查看分数);
timeShow=new JTextField(20);
timeShow.setHorizontalAlignment(SwingConstants.RIGHT); //
timeShow.setEditable(false);
JPanel p1=new JPanel();
p1.add(new JLabel("剩余时间:"));
p1.add(timeShow); //
p1.add(暂停或继续计时);
boxH1.add(p1);
boxH2.add(new JLabel("试题内容:"));
boxH2.add(new JScrollPane(试题显示区));
JPanel p2=new JPanel();
p2.add(pAddbox); //
p2.add(提交该题答案);
p2.add(读取下一题);
boxH2.add(p2);
baseBox.add(boxH1);
baseBox.add(boxH2);
setLayout(new BorderLayout());
add(baseBox,BorderLayout.CENTER);
welcomeLabel=new JLabel("欢迎考试,提高英语水平",JLabel.CENTER);
welcomeLabel.setFont(new Font("隶书",Font.PLAIN,24));
welcomeLabel.setForeground(Color.blue);
add(welcomeLabel,BorderLayout.NORTH);
}
public void itemStateChanged(ItemEvent e)
{
timeShow.setText(null);
是否关闭计时器=false;
是否暂停计时=false;
暂停或继续计时.setText("暂停计时");
String name=(String)list.getSelectedItem();
读取试题.setFilename(name);
读取试题.set完成考试(false);
time=读取试题.getTime(); //
if(countTime.isAlive()) //
{
是否关闭计时器=true;
countTime.interrupt();
}
countTime=new Thread(this);
消息区.setText(null);
试题显示区.setText(null);
读取下一题.setText("读取下一题");
提交该题答案.setEnabled(false);
读取下一题.setEnabled(true);
welcomeLabel.setText("欢迎考试,你选择的试题:"+读取试题.getFilename());
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==读取下一题");
{
读取下一题.setText("读取下一题");
提交该题答案.setEnabled(true);
String contentTest=读取试题.getTestContent();
试题显示区.setText(contentTest);
消息区.setText(null);
读取下一题.setEnabled(false);
try(
coountTime.start(); //
}
catch(Exception event)
{
//
}
}
if(e.getSource()==提交该题答案)
{
读取下一题.setEnabled(true);
提交该提答案.setEnabled(false);
String answer="?";
for(int i=0;i<11;i++)
{
if(box[i].isSelected())
{
answer=box[i].getText();
box[i].setSelected(false);
break;
}
}
读取试题.setSelection(answer);
}
if(e.getSource()==查看分数)
{
int score=读取试题.getScore();
String messages=读取试题.getMessages();
消息区.setText("分数:"+score+"\n"+messages);
}
if(e.getSource()==暂停或继续计时)
{
if(是否暂停计时==false)
{
暂停或继续计时.setText("继续计时");
是否暂停计时=true; //
}
else if(是否暂停计时==true)
{
暂停或继续计时.setText("暂停计时");
是否暂停计时=false;
countTime.interrupt(); //
}
}
}
public synchronized void run() //
{
while(true)
{
if(time<=0)
{
是否关闭计时器=true;
countTime.interrupt(); //
提交该题答案.setEnabled(false); //
读取下一题.setEnabled(false); //
timeShow.setText("考试时间用尽,考试结束");
}
else if(读取试题.get完成考试())
{
是否关闭计时器=true;
timeShow.setText("考试结果:分数*剩余时间(秒)="+1.0*读取试题.getScore()*(time/1000));
countTime.interrupt(); //
提交该题答案.setEnabled(false); //
读取下一题.setEnabled(false); //
}
else if(time>=1)
{
time=time-1000;
long leftTime=time/1000; //
long leftHoer=leftTime/3600; //
long leftMinute(leftTime-leftHour*3600)/60; //
long leftSecond=leftTime%60; //
timeShow.setText(""+leftHour+" 小 时 "+leftMinute+" 分 "+leftSecond+" 秒 ");
}
try
{
Thread.sleep(1000); //
}
catch(InterruptedException ee)
{
if(是否关闭计时器==true)
return; //
}
while(是否暂停计时==true)
{
try
{
wait(); //
}
catch(InterruptedException ee)
{
if(是否暂停计时==false)
{
notifyAll(); //
}
}
}
}
}
}