加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Java的打字练习的软件及源码

(2013-12-01 20:32:16)
标签:

打字练习

java

源码

applet小程序

多线程

分类: Java技术或应用

自己用Java写的打字练习小程序,请参考界面及源码:

下图为打字练习主界面截图:

http://s6/mw690/002OXMuIgy6EENY1HDfc5&690

主界面主要有以下几部分组成:

1.下落字符串。

2.用户输入文本框。

3.计分显示。

4.速度、字符长度、大小写控制。

5.“重新开始”、“继续”、“暂停”按钮。

类RollWordInput.java的源代码

import java.awt.*;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

 

import javax.swing.ButtonGroup;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JRadioButton;

import javax.swing.JSpinner;

import javax.swing.JTextField;

import javax.swing.SpinnerNumberModel;

import javax.swing.event.ChangeEvent;

import javax.swing.event.ChangeListener;

 

@SuppressWarnings("serial")

public class RollWordInput extends JFrame implements Runnable{

String[] words {"A","B","C","D","E",

                      "F","G","H","I","J",

                      "K","L","M","N","O",

                      "P","Q","R","S","T",

                      "U","V","W","X","Y","Z",

                      "a","b","c","d","e",

                      "f","g","h","i","j",

                      "k","l","m","n","o",

                      "p","q","r","s","t",

                      "u","v","w","x","y","z"};//定义26个英文字母(包含大小写)数组。

private StringBuffer rollWords;//存放下落字符串

private int wordCount 5;//存放下落字符串个数

    private int dropSpeed 100;//字符串下落速度

    private int 0;//字符串y轴坐标

    private int score 0;//得分

    private Thread currentThred null;//java线程,用于控制下落字符串速度,“继续”,“暂停”。

    private Mypanel draw null;//绘制字符串内部类

    private JTextField inputText null; //输入文本框

    private JTextField scoreText null; //显示得分文本框

    private JSpinner speedSpinner null; //调整字符窜下落速度的组件

    private JSpinner wordCountSpinner null; //调整字符串长度的组件

    private JRadioButton ignoreCase null; //忽略大小写单选框

    private JRadioButton noIgnoreCase null; //区分带、小写单选框

    private boolean isPause false; //是否暂停flag

    

    

    public RollWordInput (){

      draw new Mypanel();

      -5;

      score 0;

    }

 

    

public void init() {

    Container con this.getContentPane();

        BorderLayout layout new BorderLayout();

        con.setLayout(layout);

        con.add(draw, BorderLayout.CENTER);//添加下落字符串面板

        con.add(this.getSouthPanel(), BorderLayout.SOUTH); //添加设置面板

        this.validate();

    }

 

 

public void start(){

if(null == currentThred){

currentThred new Thread(this);

currentThred.start();

        }

    

    

 

    public void run() {

     while (y 250) {

            y+10;

            if(y >= 250){

             rollWords new StringBuffer(15);

                for(int i=0; i< wordCount; i++){

                    rollWords.append(words[(int)(Math.random()*51)+1]);//随即产生wordCount个字母并组成下落字符串

                }

            }

            y%0;

            draw.repaint();//重新绘制字符串

          

            try {

             currentThred.sleep(dropSpeed); //线程暂停dropSpeed毫秒

            }

            catch (InterruptedException e) {

                e.printStackTrace();

            }

        }

    }

    

    

    private JPanel getSouthPanel(){

     JPanel southPanel new JPanel();

     southPanel.setLayout(new BorderLayout());

     southPanel.add(this.getInputTextPanel(), BorderLayout.NORTH);//加载输入文本框按钮

     southPanel.add(this.getBottomPanel(), BorderLayout.SOUTH);//加载下面部分面板(设置与按钮)

    

     return southPanel;

    }

    

    

    private JPanel getInputTextPanel(){

     JPanel returnPanel new JPanel();

     returnPanel.setLayout(new BorderLayout());

    

     JLabel inputLabel new JLabel("请输入下落字符串:");

      if(null == inputText){

     inputText new JTextField(); 

     inputText.addKeyListener(new MyKeyReleased());//添加键盘事件(即当输入文本框中字母数量相同时判断是否加分或减分)

     }

     

      returnPanel.add(inputLabel, BorderLayout.WEST);//标签

      returnPanel.add(inputText, BorderLayout.CENTER);//文本框

    

     return returnPanel;

    }

    

    

    private JPanel getBottomPanel(){

        JPanel southPanel new JPanel();

        southPanel.setLayout(new BorderLayout());

        southPanel.add(this.getSetPanel(), BorderLayout.CENTER);//加载设置面板

        southPanel.add(this.getButtonPanel(), BorderLayout.SOUTH);//加载最先面按钮面板

        

        return southPanel;

    }

    

    

    private JPanel getSetPanel(){

        JPanel setPanel new JPanel();

        setPanel.setLayout(new FlowLayout(FlowLayout.CENTER));

        setPanel.add(this.getScoreTextPanel());//得分

        setPanel.add(this.getSpeedSpinnerPanel());//速度

        setPanel.add(this.getWordCountSpinnerPanel());//字符串长度

        setPanel.add(this.getIgnorePanel());//区分大小写

        

        return setPanel;

    }

 

    

private JPanel getButtonPanel(){

JPanel buttonPanel new JPanel();

buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER));

buttonPanel.add(this.getReStartButton());//重新开始

buttonPanel.add(this.getStartButton());//继续

buttonPanel.add(this.getPauseButton());//暂停

 

return buttonPanel;

}

 

 

private JPanel getScoreTextPanel(){

JPanel returnPanel new JPanel();

     returnPanel.setLayout(new BorderLayout());

    

     JLabel scoreLabel new JLabel("得分:");

if(null == scoreText){

scoreText new JTextField();

scoreText.setText(""+score);

scoreText.setEditable(false);

scoreText.setColumns(5);

}

 

returnPanel.add(scoreLabel, BorderLayout.CENTER);

returnPanel.add(scoreText, BorderLayout.EAST);

 

return returnPanel;

}

 

 

private JButton getReStartButton(){

        JButton reStartButton new JButton("重新开始");  

        reStartButton.addMouseListener(new MouseListener(){

            public void mouseClicked(MouseEvent e) {//点击该按钮时重置所有组件

                reSet();

                scoreText.setText("0");

                ignoreCase.setSelected(true);

                noIgnoreCase.setSelected(false);

                speedSpinner.setValue(100);

                wordCountSpinner.setValue(5);

            }

            public void mousePressed(MouseEvent e) {}

            public void mouseReleased(MouseEvent e) {}

            public void mouseEntered(MouseEvent e) {}

            public void mouseExited(MouseEvent e) {}

        });

        

        return reStartButton;

    }

 

 

private JButton getStartButton(){

JButton startButton new JButton("继续");  

        startButton.addMouseListener(new MouseListener(){

            public void mouseClicked(MouseEvent e) {

             currentThred.resume();//点击此按钮唤醒进程

             isPause false;

                System.out.println("start");

            }

            public void mousePressed(MouseEvent e) {}

        public void mouseReleased(MouseEvent e) {}

        public void mouseEntered(MouseEvent e) {}

        public void mouseExited(MouseEvent e) {}

        });

        

        return startButton;

}

 

 

private JButton getPauseButton(){

JButton pauseButton new JButton("暂停");  

    pauseButton.addMouseListener(new MouseListener(){

        public void mouseClicked(MouseEvent e) {

         currentThred.suspend();//点击此按钮阻塞进程

         isPause true;

            System.out.println("pause");

        }

        public void mousePressed(MouseEvent e) {}

        public void mouseReleased(MouseEvent e) {}

        public void mouseEntered(MouseEvent e) {}

        public void mouseExited(MouseEvent e) {}

    });

    

    return pauseButton;

}

 

 

private JPanel getSpeedSpinnerPanel() {

JPanel returnPanel new JPanel();

     returnPanel.setLayout(new BorderLayout());

    

     JLabel speedLabel new JLabel("速度:");

if(null == speedSpinner){

speedSpinner new JSpinner(new SpinnerNumberModel(100, 0, 500, 1));

        speedSpinner.addChangeListener(new ChangeListener(){

            public void stateChanged(ChangeEvent e){//处理变动事件

                int spinnerValue Integer.parseInt(""+speedSpinner.getValue());//获取设置的值

                if(spinnerValue == 0){

                    currentThred.suspend();//如果设置速度为0,我们通过阻塞进程来实现是字符串暂停下落。

                else {

                    if(!isPause){//只有当没有点击“暂停”按钮时我们才唤醒进程。

                        currentThred.resume();

                    }

                    dropSpeed 500 spinnerValue;//为了实现用户设置值越大,下落速度越快(即进程阻塞期越短)。

                }

            }

        });

}

returnPanel.add(speedLabel, BorderLayout.WEST);

returnPanel.add(speedSpinner, BorderLayout.EAST);

        

        return returnPanel;

    }

 

 

private JPanel getWordCountSpinnerPanel() {

JPanel returnPanel new JPanel();

     returnPanel.setLayout(new BorderLayout());

    

     JLabel countLabel new JLabel("字符长度:");

if(null == wordCountSpinner){

wordCountSpinner new JSpinner(new SpinnerNumberModel(5, 1, 15, 1));

        wordCountSpinner.addChangeListener(new ChangeListener(){

            public void stateChanged(ChangeEvent e){

                wordCount Integer.parseInt(""+wordCountSpinner.getValue());//获取用户设置字符串长度并将其赋予wordCount变量

            }

        });

}

returnPanel.add(countLabel, BorderLayout.CENTER);

returnPanel.add(wordCountSpinner, BorderLayout.EAST);

        

        return returnPanel;

    }

 

 

private JPanel getIgnorePanel(){

    JPanel returnPanel new JPanel();

    returnPanel.setLayout(new BorderLayout());

    

    JLabel ignoreLabel new JLabel("区分大小写:");

    if(null == ignoreCase){

        ignoreCase new JRadioButton("");

        ignoreCase.setSelected(true);//初始状态下忽略大小写

    }

    

    if(null == noIgnoreCase){

        noIgnoreCase new JRadioButton("");

    }

    

    ButtonGroup buttonGroup new ButtonGroup();

        buttonGroup.add(ignoreCase);

        buttonGroup.add(noIgnoreCase);

    

        returnPanel.add(ignoreLabel, BorderLayout.WEST);

    returnPanel.add(ignoreCase, BorderLayout.CENTER);

        returnPanel.add(noIgnoreCase, BorderLayout.EAST);

    

    return returnPanel;

}

 

 

class Mypanel extends JPanel {

     public Mypanel(){

     rollWords new StringBuffer(15);

            for(int i=0; i< wordCount; i++){

                rollWords.append(words[(int)(Math.random()*51)+1]);

            }

     }

        public void paint(Graphics g) {

            g.setColor(Color.orange);

            g.fillRect(0, 0, this.getWidth(), this.getHeight());

            g.setColor(Color.red);

            Font font new Font(Font.SERIF, Font.BOLD, 25);

            g.setFont(font);

            g.drawString(rollWords.toString(), 200, y);

        }

    }

 

 

private class MyKeyReleased extends KeyAdapter {

public void keyReleased(KeyEvent e) {

String inputString inputText.getText();

if(inputString.length() == wordCount){

    boolean isInputRightString ignoreCase.isSelected() 

            inputString.equalsIgnoreCase(rollWords.toString()) 

                inputString.equals(rollWords.toString());//若用户是否输入正确字符串(包括字符串大小写匹配)

if(isInputRightString){//输入正确字符串+1

System.out.print("you are right!");

score++;

                    reSet();

else {//输入正确字符串-1

    System.out.print("you are wrong!");

    score--;

    reSet();

}

}

else if(inputString.length() wordCount){

    reSet();

}

}

}

 

 

private void reSet(){

    inputText.setText("");

        -5;

        rollWords new StringBuffer(15);

        for(int i=0; i< wordCount; i++){

            rollWords.append(words[(int)(Math.random()*51)+1]);

        }

        scoreText.setText(""+score);

}

 

 

    public static void main(String args[]) {

     RollWordInput frame new RollWordInput();

     frame.setTitle("打字练习小程序");

        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

        frame.setVisible(true);

        Dimension screenSize Toolkit.getDefaultToolkit().getScreenSize();   

        frame.setSize(((screenSize.width)/2)+100, ((screenSize.height)/2)+20);

        frame.setLocation((screenSize.width)/4, (screenSize.height)/4); 

        frame.start();

        frame.init();

    }

}


RollWordApplet.java的源代码

import java.applet.Applet;

import java.awt.Dimension;

import java.awt.Toolkit;

 

@SuppressWarnings("serial")

public class RollWordApplet extends Applet {

    public void init() {

        GetParameters getparam new GetParameters();

        RollWordInput frame new RollWordInput(getparam);

        frame.setTitle(getparam.getParamValue("title"));

        //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setVisible(true);

        Dimension screenSize Toolkit.getDefaultToolkit().getScreenSize();   

        frame.setSize(((screenSize.width)/2)+100, ((screenSize.height)/2));

        frame.setLocation((screenSize.width)/4, (screenSize.height)/4); 

        frame.start();

        frame.init();

    }

}

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有