转眼已经学了一学期的java了,老师让我们根据所学知识点写一个打字练习软件的综合练习。一开始我也不是很有思路,我找了一下发现csdn上关于这个小项目的代码也不算很多,所以我最后自己在csdn查了一些资料,写了这么一个简略版本的打字练习软件(本人菜鸟,大佬勿喷),现在我把我写这个小项目的心路历程进行一下简单的总结。

首先建立TypeFrame包并在包下建立如下类容:

第一步对界面的初始化:

    public TypeFrame(){this.setBounds(600,300,950,600);this.setLayout(new FlowLayout());this.setDefaultCloseOperation(3);this.setResizable(false);this.setVisible(true);}

第二步对界面的组件进行初始化

1.在成员部分进行声明

    JMenuBar Bar;JMenu menu;JMenuItem item1;JMenuItem item2;JMenuItem item3;JLabel label1;JLabel label2;JLabel label3;JLabel label4;JLabel label5;JLabel label6;JTextField text1;JTextField text2;JTextField text3;JTextField text4;JTextField text5;JTextArea textArea1;JTextArea textArea2;int CorrectNum=0;//打字正确数int ErrorNum=0;//打字错误数int TypeNum=0;//打字总数Timer  time;int Time=0;//打字时间int v=0;//打字速度JFileChooser  chooser;

2.在init函数内对其进行初始化

 public void init(){Bar=new JMenuBar();menu=new JMenu("菜单");item1=new JMenuItem("导入文本");item1.addActionListener(this);item2=new JMenuItem("保存");item2.addActionListener(this);item3=new JMenuItem("退出");item3.addActionListener(this);Bar.add(menu);menu.add(item1);menu.add(item2);menu.add(item3);this.getContentPane().add(Bar);label1=new JLabel("用时:");label2=new JLabel("总字数:");label3=new JLabel("正确:");label4=new JLabel("错误:");label5=new JLabel("每分钟:");label6=new JLabel("个字");text1=new JTextField(10);text1.setHorizontalAlignment(JTextField.CENTER);//设置文本居中显示text2=new JTextField(10);text2.setHorizontalAlignment(JTextField.CENTER);text3=new JTextField(10);text3.setHorizontalAlignment(JTextField.CENTER);text4=new JTextField(10);text4.setHorizontalAlignment(JTextField.CENTER);text5=new JTextField(10);text5.setHorizontalAlignment(JTextField.CENTER);time =new Timer(1000, this);time.start();//这里比较难--既要控制确定的行数和列数还要保准写入的数字不会缩进// 是否自动换行,默认为 false//void setLineWrap(boolean wrap)//row--行数 columns--列数textArea1 = new JTextArea(11, 80);textArea1.setLineWrap(true);textArea1.setFont(new Font("隶书",Font.BOLD,20));textArea1.append("abcdefghijklmnopqrstuvwsyz");textArea2 = new JTextArea(11, 80);textArea2.setLineWrap(true);textArea2.setFont(new Font("隶书",Font.BOLD,20));textArea2.addKeyListener(this);try {BufferedReader br=new BufferedReader(new FileReader("C:\\Users\\略略略\\IdeaProjects\\out\\TypeFrame\\src\\a.txt"));String str;textArea2.setText(null);while ((str=br.readLine())!=null){textArea2.append(str);}} catch (IOException ex) {throw new RuntimeException(ex);}//如何对textArea进行监听?chooser=new JFileChooser();this.add(label1);this.add(text1);this.add(label2);this.add(text2);this.add(label3);this.add(text3);this.add(label4);this.add(text4);this.add(label5);this.add(text5);this.add(label6);this.getContentPane().add(textArea1);this.getContentPane().add(textArea2);this.setVisible(true);}

第三步对TextArea,item1,2,3组件进行监听

textArea2.addKeyListener(this);try {BufferedReader br=new BufferedReader(new FileReader("C:\\Users\\略略略\\IdeaProjects\\out\\TypeFrame\\src\\a.txt"));String str;textArea2.setText(null);while ((str=br.readLine())!=null){textArea2.append(str);}} catch (IOException ex) {throw new RuntimeException(ex);}
  @Overridepublic void actionPerformed(ActionEvent e) {if(e.getSource()==item1){InitData();Time=0;InitText();textArea2.setText(null);int result = chooser.showOpenDialog(null);// 如果用户选择了文件或目录,获取用户所选的文件路径并输出if (result == JFileChooser.APPROVE_OPTION) {String filePath = chooser.getSelectedFile().getAbsolutePath();try {BufferedReader br=new BufferedReader(new FileReader(filePath));String str;textArea1.setText(null);while ((str=br.readLine())!=null){textArea1.append(str);}Time=0;} catch (IOException ex) {throw new RuntimeException(ex);}// System.out.println("用户选择的文件路径为:" + filePath);}}else if(e.getSource()==item2){String str=textArea2.getText();try {BufferedWriter bw=new BufferedWriter(new FileWriter("C:\\Users\\略略略\\IdeaProjects\\out\\TypeFrame\\src\\a.txt"));bw.write(str);bw.close();//不关流是保存不了文本的} catch (IOException ex) {throw new RuntimeException(ex);}System.out.println(str);System.out.println("保存成功");} else if(e.getSource()==item3){System.exit(0);}Time++;text1.setText(Time+"");v=TypeNum*60/Time;text5.setText(v+"");}

补充一下 InitData(),InitText()两个函数

    public void InitText() {text2.setText(TypeNum+"");text3.setText(CorrectNum+"");text4.setText(ErrorNum+"");text5.setText(v+"");}public void InitData() {CorrectNum=0;ErrorNum=0;TypeNum=0;v=0;}

完整代码如下:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.*;public class TypeFrame extends JFrame implements ActionListener, KeyListener {JMenuBar Bar;JMenu menu;JMenuItem item1;JMenuItem item2;JMenuItem item3;JLabel label1;JLabel label2;JLabel label3;JLabel label4;JLabel label5;JLabel label6;JTextField text1;JTextField text2;JTextField text3;JTextField text4;JTextField text5;JTextArea textArea1;JTextArea textArea2;int CorrectNum=0;//打字正确数int ErrorNum=0;//打字错误数int TypeNum=0;//打字总数Timer  time;int Time=0;//打字时间int v=0;//打字速度JFileChooser  chooser;public TypeFrame(){this.setBounds(600,300,950,600);this.setLayout(new FlowLayout());this.setDefaultCloseOperation(3);this.setResizable(false);this.setVisible(true);}public void init(){Bar=new JMenuBar();menu=new JMenu("菜单");item1=new JMenuItem("导入文本");item1.addActionListener(this);item2=new JMenuItem("保存");item2.addActionListener(this);item3=new JMenuItem("退出");item3.addActionListener(this);Bar.add(menu);menu.add(item1);menu.add(item2);menu.add(item3);this.getContentPane().add(Bar);label1=new JLabel("用时:");label2=new JLabel("总字数:");label3=new JLabel("正确:");label4=new JLabel("错误:");label5=new JLabel("每分钟:");label6=new JLabel("个字");text1=new JTextField(10);text1.setHorizontalAlignment(JTextField.CENTER);//设置文本居中显示text2=new JTextField(10);text2.setHorizontalAlignment(JTextField.CENTER);text3=new JTextField(10);text3.setHorizontalAlignment(JTextField.CENTER);text4=new JTextField(10);text4.setHorizontalAlignment(JTextField.CENTER);text5=new JTextField(10);text5.setHorizontalAlignment(JTextField.CENTER);time =new Timer(1000, this);time.start();//这里比较难--既要控制确定的行数和列数还要保准写入的数字不会缩进// 是否自动换行,默认为 false//void setLineWrap(boolean wrap)//row--行数 columns--列数textArea1 = new JTextArea(11, 80);textArea1.setLineWrap(true);textArea1.setFont(new Font("隶书",Font.BOLD,20));textArea1.append("abcdefghijklmnopqrstuvwsyz");textArea2 = new JTextArea(11, 80);textArea2.setLineWrap(true);textArea2.setFont(new Font("隶书",Font.BOLD,20));textArea2.addKeyListener(this);try {BufferedReader br=new BufferedReader(new FileReader("C:\\Users\\略略略\\IdeaProjects\\out\\TypeFrame\\src\\a.txt"));String str;textArea2.setText(null);while ((str=br.readLine())!=null){textArea2.append(str);}} catch (IOException ex) {throw new RuntimeException(ex);}//如何对textArea进行监听?chooser=new JFileChooser();this.add(label1);this.add(text1);this.add(label2);this.add(text2);this.add(label3);this.add(text3);this.add(label4);this.add(text4);this.add(label5);this.add(text5);this.add(label6);this.getContentPane().add(textArea1);this.getContentPane().add(textArea2);this.setVisible(true);}@Overridepublic void actionPerformed(ActionEvent e) {if(e.getSource()==item1){InitData();Time=0;InitText();textArea2.setText(null);int result = chooser.showOpenDialog(null);// 如果用户选择了文件或目录,获取用户所选的文件路径并输出if (result == JFileChooser.APPROVE_OPTION) {String filePath = chooser.getSelectedFile().getAbsolutePath();try {BufferedReader br=new BufferedReader(new FileReader(filePath));String str;textArea1.setText(null);while ((str=br.readLine())!=null){textArea1.append(str);}Time=0;} catch (IOException ex) {throw new RuntimeException(ex);}// System.out.println("用户选择的文件路径为:" + filePath);}}else if(e.getSource()==item2){String str=textArea2.getText();try {BufferedWriter bw=new BufferedWriter(new FileWriter("C:\\Users\\略略略\\IdeaProjects\\out\\TypeFrame\\src\\a.txt"));bw.write(str);bw.close();//不关流是保存不了文本的} catch (IOException ex) {throw new RuntimeException(ex);}System.out.println(str);System.out.println("保存成功");} else if(e.getSource()==item3){System.exit(0);}Time++;text1.setText(Time+"");v=TypeNum*60/Time;text5.setText(v+"");}public void InitText() {text2.setText(TypeNum+"");text3.setText(CorrectNum+"");text4.setText(ErrorNum+"");text5.setText(v+"");}public void InitData() {CorrectNum=0;ErrorNum=0;TypeNum=0;v=0;}@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void keyPressed(KeyEvent e) {if(textArea2.getText().length()<=textArea1.getText().length()){InitData();for (int i=0;i<textArea2.getText().length();i++){if(textArea2.getText().charAt(i)==textArea1.getText().charAt(i)){CorrectNum++;TypeNum++;text2.setText(TypeNum+"");text3.setText(CorrectNum+"");}else{ErrorNum++;TypeNum++;text2.setText(TypeNum+"");text4.setText(ErrorNum+"");}}}else{JOptionPane.showMessageDialog(null, "已超出数字范围!", "提示",JOptionPane.PLAIN_MESSAGE);}InitText();}@Overridepublic void keyReleased(KeyEvent e) {}
}
public class APP {public static void main(String[] args) {TypeFrame app=new TypeFrame();app.init();}
}

a.txt

功能简介

导入文本--可以向第一个文本写入数据

保存--可以把“我”写的文本保存进入a.txt中,下一次打开这个软件时会自动写入保存在a.txt文本的内容。

退出--点击退出,app会直接关闭。

事先在桌面建立1.txt文本,并向里面写入数据

点击第二个Desktop

希望看到最后的你,如果觉得这篇文章对你有一点点帮助或者启示的话,求点赞,求收藏,求关注,谢谢啦!!!

JAVA实现打字练习软件相关推荐

  1. Java版打字练习游戏源码

    代码如下 import java.applet.Applet; import java.applet.AudioClip; import java.awt.Dimension; import java ...

  2. java学的什么软件_java初学者用什么软件

    Java初学者可以使用MyEclipse或eclipse以及记事本.随着学习的深入,相信你会逐渐明白,你会从中找到最合适的开发工具. java初学者使用什么软件 Java初学者可以使用MyEclips ...

  3. 学Java需要下载什么软件?都有什么作用?

    学习java并非大家想象中的那么简单,除了书本和老师面授,软件的使用也有很大的作用,接下来小编为大家分享的就是关于"学Java需要下载什么软件?都有什么作用?"的内容,希望能够给正 ...

  4. 几款Java手机看书软件(一)

    Java手机看书软件(一) 魔屏3.0 魔屏(MoScreen)是一款手机漫画阅读器,可以查找.下载阅读多种格式的富媒体内容. 魔屏3.0主要功能: 漫画分类:支持分类浏览漫画名称.简介.资费等信息并 ...

  5. 来自韩国的优秀Java应用性能监控软件JENNIFER

    来自韩国的优秀Java应用性能监控软件JENNIFER 详细可参考:http://www.innovatedigital.com/JENNIFER.html JENNIFER服务监控: ●连接中的实时 ...

  6. 无忧考吧2017二级java_二级Java模拟软件|无忧考吧二级Java语言程序设计模拟软件下载 v2017.03官方版 - 121下载站...

    无忧考吧二级Java语言程序设计模拟软件是专为准备考试二级JAVA语言的朋友打造的一款在线模拟软件,二级JAVA语言的考试理论上是非常简单的, 大家只需要掌握基本的语法和一些简单的编程就可能了,这款软 ...

  7. java开发用怎么软件开发_Java 9中的5个功能将改变您开发软件的方式(还有2个不会)...

    java开发用怎么软件开发 有望在Java 9中发布的最令人兴奋的功能是什么? 近期不要对Java 9相对沉默而分心.JDK提交者正在努力准备下一个版本,预计在2015年12月才完成功能的下一个版本. ...

  8. 会java的鸭子_鸭子在Java中打字? 好吧,不完全是

    会java的鸭子 根据维基百科,鸭子的打字是: 动态类型的类型,其中对象的方法和属性确定有效的语义,而不是其从特定类或特定接口的实现继承 用简单的话 当我看到一只鸟走路像鸭子,游泳像鸭子,嘎嘎像鸭子一 ...

  9. 鸭子在Java中打字? 好吧,不完全是

    根据维基百科,鸭子的打字是: 动态类型的类型,其中对象的方法和属性确定有效的语义,而不是其从特定类或特定接口的实现继承 用简单的话 当我看到一只鸟走路像鸭子,游泳像鸭子,嘎嘎像鸭子一样时,我称那只鸟为 ...

最新文章

  1. mailscanner参数
  2. ICS SIP Call移植
  3. LibcarePlus用户态程序热补丁
  4. 项目1:交换机后台管理程序(待续1……)
  5. 转 LCD的接口类型详解
  6. DBCC CHECKDB 数据库或表修复
  7. CANoe+Carmaker联合仿真测试
  8. BMCBIOS全擦升级
  9. 数据分析项目实战—信用卡客户违约概率预测
  10. python双人贪吃蛇游戏
  11. 高级语言程序设计(c语言版)课后答案,高级语言程序设计习题与解答(C语言版)/高等院校教材...
  12. java:窗体里的标签(图片标签)
  13. Kryo官方文档-中文翻译
  14. 笔记本电脑安装CentOS7
  15. 时间脱敏,也许能稍稍帮助你摆脱焦虑
  16. Centos7安装使用libvirt
  17. 前端 100 问:你会多少?
  18. 新媒体运营教程:AARRR模型之留存有关方法论
  19. ASTM D 3801固体塑料垂直燃烧试验
  20. ASP.NET Core学习之路03

热门文章

  1. 有关1024的冷知识
  2. SVN 学习笔记二(一口气学会SVN)
  3. 安装Oracle12C提示Hard limit:maxinum open file descriptors的解决方法
  4. 【Python|hdf5】OSError: Unable to open file 解决方法
  5. Asp.Net与SEO – Web标准与网站重构
  6. 大气数据计算机的功能,大气数据计算机综合测试系统
  7. Linux下安装配置Postfix邮件服务器
  8. 『行远见大』 LCQMC 信息检索文本相似度 Baseline
  9. 单点登录(原理与代码)
  10. 常用专业英语单词及常用专业词组缩写汇总