今天的java课程实验题就是用Swing+线程同步实现一个简易打字游戏
话不多说直接看源码
解题思路
直接设置三个java文件,一个ThreadWordMainClass文件作为主程序,WordThread文件作为打字的线程,每一个Unicode码对应一个字符集,ThreadFrame设置主体窗口。
三个文件的源码如下:
1.ThreadWordMainClass
package ClassWork;
public class ThreadWordMainClass {
public static void main(String args[]) {
new ThreadFrame().setTitle("汉字打字练习");
}
}
2.WordThread
package ClassWork;
import javax.swing.JTextField;
public class WordThread extends Thread {
char word;
int startPosition =19968; //Unicode表的19968位置至32320上的汉字
int endPosition = 32320;
JTextField showWord;
int sleepLength = 6000;
public void setJTextField(JTextField t) {
showWord = t;
showWord.setEditable(false);
}
public void setSleepLength(int n){
sleepLength = n;
}
public void run() {
int k=startPosition;
while(true) {
word=(char)k;//将Unicode编码强制转换成汉字字符
showWord.setText(""+word);//更新字符
try{
Thread.sleep(sleepLength); // 【代码1】//调用sleep方法使得线程中断sleepLength豪秒
}
catch(InterruptedException e){}
k++;
if(k>=endPosition)
k=startPosition;
}
}
}
3.ThreadFrame
package ClassWork;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ThreadFrame extends JFrame implements ActionListener {
JTextField showWord;
JButton button;
JTextField inputText,showScore;
WordThread giveWord = new WordThread();//【代码2】//用WordThread声明一个giveWord线程象
int score=0;
ThreadFrame() {
showWord = new JTextField(6);
showWord.setFont(new Font("",Font.BOLD,72));
showWord.setHorizontalAlignment(JTextField.CENTER );
giveWord.start();//【代码3】//创建giveWord线程
giveWord.setJTextField(showWord);
giveWord.setSleepLength(5000);
button=new JButton("开始");
inputText = new JTextField(10);
showScore = new JTextField(5);
showScore.setEditable(false);
button.addActionListener(this);//button注册ActionListener监听器
inputText.addActionListener(this);
add(button,BorderLayout.NORTH);
add(showWord,BorderLayout.CENTER);
JPanel southP=new JPanel();
southP.add(new JLabel("输入汉字(回车):"));
southP.add(inputText);
southP.add(showScore);
add(southP,BorderLayout.SOUTH);
setBounds(100,100,350,180);
setVisible(true);//设置窗口可见
validate();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==button) { //单击开始按钮响应代码
if(!(giveWord.isAlive())){
giveWord.start();//【代码6】//创建giveWord
giveWord.setJTextField(showWord);
giveWord.setSleepLength(3000);
}
try {
giveWord.start();//【代码7】//giveWord调用方法start()
}
catch(Exception exe){}
}
else if(e.getSource()==inputText) { //在文本框中输入文字后按下回车响应代码
if(inputText.getText().equals(showWord.getText()))
score++;
showScore.setText("得分:"+score);
inputText.setText(null);
}
}
}