首页 > 代码库 > Java版打字练习案例源码

Java版打字练习案例源码

代码如下

import java.applet.Applet;import java.applet.AudioClip;import java.awt.Dimension;import java.awt.Font;import java.awt.Toolkit;import javax.swing.JFrame;import javax.swing.JPanel;import java.awt.Rectangle;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JOptionPane;import javax.swing.JSlider;import javax.swing.JLabel;import javax.swing.UIManager;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.io.File;import java.util.Vector;public class Main extends JFrame implements Runnable {        private static final long serialVersionUID = -2831332650077025158L;        JPanel contentPane;        JPanel jPanel1 = new JPanel();        JButton jButton1 = new JButton();        JSlider jSlider1 = new JSlider();        JLabel jLabel1 = new JLabel();        JButton jButton2 = new JButton();        JLabel jLabel2 = new JLabel();        int count = 1, rapidity = 5;         int zhengque = 0, cuowu = 0;        int rush[] = { 10, 20, 30 };         int rush_count = 0;         char list[] = { ‘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‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘ };         Vector number = new Vector();        String paiduan = "true";        AudioClip Musci_anjian, Music_shibai, Music_chenggong;        public Main() {                try {                        setDefaultCloseOperation(EXIT_ON_CLOSE);                        // -----------------声音文件---------------------                        Musci_anjian = Applet.newAudioClip(new File("sounds//anjian.wav")                                        .toURL());                        Music_shibai = Applet.newAudioClip(new File("sounds//shibai.wav")                                        .toURL());                        Music_chenggong = Applet.newAudioClip(new File(                                        "sounds//chenggong.wav").toURL());                        // ---------------------------------------                        jbInit();                } catch (Exception exception) {                        exception.printStackTrace();                }        }        /**         * 初始化         *          * @throws Exception         */        private void jbInit() throws Exception {                contentPane = (JPanel) getContentPane();                contentPane.setLayout(null);                setSize(new Dimension(588, 530));                setTitle("Frame Title");                jPanel1.setBorder(BorderFactory.createEtchedBorder());                jPanel1.setBounds(new Rectangle(4, 4, 573, 419));                jPanel1.setLayout(null);                jButton1.setBounds(new Rectangle(277, 442, 89, 31));                jButton1.setText("开始");                jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));                jSlider1.setBounds(new Rectangle(83, 448, 164, 21));                jSlider1.setMaximum(100);                jSlider1.setMinimum(0);                jSlider1.setValue(95);                jLabel1.setText("速度");                jLabel1.setBounds(new Rectangle(35, 451, 39, 18));                jButton2.setBounds(new Rectangle(408, 442, 89, 31));                jButton2.setText("结束");                jButton2.addActionListener(new Frame1_jButton2_actionAdapter(this));                jLabel2.setText("第一关:10个");                jLabel2.setBounds(new Rectangle(414, 473, 171, 21));                contentPane.add(jPanel1);                contentPane.add(jButton2);                contentPane.add(jButton1);                contentPane.add(jSlider1);                contentPane.add(jLabel1);                contentPane.add(jLabel2);                this.addKeyListener(new MyListener());                jButton1.addKeyListener(new MyListener());                jSlider1.addKeyListener(new MyListener());                jSlider1.addChangeListener(new ChangeListener() {                        public void stateChanged(ChangeEvent e) {                                rapidity = 100 - jSlider1.getValue();                        }                });        }        /**         * 主线程         */        public void run() {                number.clear();                zhengque = 0;                cuowu = 0;                paiduan = "true";                while (count <= rush[rush_count]) {                        try {                                Thread t = new Thread(new Tthread());                                t.start();                                count += 1;                                Thread.sleep(50 + (int) (Math.random() * 500)); // 生产下组停顿时间                                // 最快0.05秒.最慢0.5秒                        } catch (InterruptedException e) {                                e.printStackTrace();                        }                }                while (true) { // 等待最后一个字符消失                        if (number.size() == 0) {                                break;                        }                }                if (zhengque == 0) { // 为了以后相除..如果全部正确或者错误就会出现错误. 所以..                        zhengque = 1;                }                if (paiduan.equals("true")) { // 判断是否是自然结束                        if (cuowu <= 2) { // 错误不超过2个的过关                                JOptionPane.showMessageDialog(null, "恭喜你过关了");                                rush_count += 1; // 自动加1关                                if (rush_count < rush.length) {                                        if (rapidity > 10) { // 当速度大于10的时候在-5提加速度.怕速度太快                                                rapidity -= 5; // 速度自动减10毫秒                                                jSlider1.setValue(rapidity); // 选择位置                                        }                                        Thread t = new Thread(this);                                        t.start();                                } else {                                        JOptionPane.showMessageDialog(null, "牛B...你通关了..");                                        rush_count = 0;                                        count = 0;                                }                        } else {                                JOptionPane.showMessageDialog(null, "请再接再励");                                rush_count = 0;                                count = 0;                        }                } else {                        rush_count = 0;                        count = 0;                }        }        public void jButton1_actionPerformed(ActionEvent e) {                Thread t = new Thread(this);                t.start();        }        public void jButton2_actionPerformed(ActionEvent e) {                count = rush[rush_count] + 1;                paiduan = "flase";        }        /**         * 字符下移线程         */        class Tthread implements Runnable {                public void run() {                        boolean fo = true;                        int Y = 0, X = 0;                        JLabel show = new JLabel();                        show.setFont(new java.awt.Font("宋体", Font.PLAIN, 33));                        jPanel1.add(show);                        X = 10 + (int) (Math.random() * 400);                        String parameter = list[(int) (Math.random() * list.length)] + "";                        Bean bean = new Bean();                        bean.setParameter(parameter);                        bean.setShow(show);                        number.add(bean);                        show.setText(parameter);                        while (fo) {                                // ---------------------字符下移--------------------                                show.setBounds(new Rectangle(X, Y += 2, 33, 33));                                try {                                        Thread.sleep(rapidity);                                } catch (InterruptedException e) {                                        e.printStackTrace();                                }                                if (Y >= 419) {                                        fo = false;                                        for (int i = number.size() - 1; i >= 0; i--) {                                                Bean bn = ((Bean) number.get(i));                                                if (parameter.equalsIgnoreCase(bn.getParameter())) {                                                        cuowu += 1;                                                        jLabel2.setText("正确:" + zhengque + "个,错误:" + cuowu                                                                        + "个");                                                        number.removeElementAt(i);                                                        Music_shibai.play();                                                        break;                                                }                                        }                                }                        }                }        }        /**         * 键盘监听器         *          */        class MyListener extends KeyAdapter {                public void keyPressed(KeyEvent e) {                        String uu = e.getKeyChar() + "";                        for (int i = 0; i < number.size(); i++) {                                Bean bean = ((Bean) number.get(i));                                if (uu.equalsIgnoreCase(bean.getParameter())) {                                        zhengque += 1;                                        number.removeElementAt(i);                                        bean.getShow().setVisible(false);                                        jLabel2.setText("正确:" + zhengque + "个,错误:" + cuowu + "个");                                        Music_chenggong.play();                                        break;                                }                        }                        Musci_anjian.play();                }        }        public static void main(String[] args) {                try {                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());                } catch (Exception exception) {                        exception.printStackTrace();                }                Main frame = new Main();                Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();                Dimension frameSize = frame.getSize();                if (frameSize.height > screenSize.height) {                        frameSize.height = screenSize.height;                }                if (frameSize.width > screenSize.width) {                        frameSize.width = screenSize.width;                }                frame.setTitle("java版打字练习软件");                frame.setLocation((screenSize.width - frameSize.width) / 2,                                (screenSize.height - frameSize.height) / 2);                frame.setVisible(true);        }}class Frame1_jButton2_actionAdapter implements ActionListener {        private Main adaptee;        Frame1_jButton2_actionAdapter(Main adaptee) {                this.adaptee = adaptee;        }        public void actionPerformed(ActionEvent e) {                adaptee.jButton2_actionPerformed(e);        }}class Frame1_jButton1_actionAdapter implements ActionListener {        private Main adaptee;        Frame1_jButton1_actionAdapter(Main adaptee) {                this.adaptee = adaptee;        }        public void actionPerformed(ActionEvent e) {                adaptee.jButton1_actionPerformed(e);        }}/*** 下落的字符类* */class Bean {        String parameter = null;        JLabel show = null;        public JLabel getShow() {                return show;        }        public void setShow(JLabel show) {                this.show = show;        }        public String getParameter() {                return parameter;        }        public void setParameter(String parameter) {                this.parameter = parameter;        }}

  效果图
<ignore_js_op>

详细说明:http://java.662p.com/thread-3797-1-1.html

Java版打字练习案例源码