900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > JAVA实现打字练习软件

JAVA实现打字练习软件

时间:2020-01-08 03:50:02

相关推荐

JAVA实现打字练习软件

转眼已经学了一学期的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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。