使用Swing提供的组件创建一个类似金山打字通的程序,统计用户每分钟输入的字符数目、正确字符数目、正确率。
时间: 2023-06-24 12:07:17 浏览: 37
首先,需要使用Swing提供的组件创建一个界面,包括输入框、输出框、开始按钮和统计结果的区域。然后,需要在程序中监听用户的输入,并记录正确的字符数目和总的字符数目,以及开始计时。在计时结束后,根据记录的数据计算正确率,并将统计结果显示在界面上。
下面是一个简单的实现示例:
```java
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class TypingTutor extends JFrame implements ActionListener, KeyListener {
private static final long serialVersionUID = 1L;
private JTextField inputField;
private JTextArea outputArea;
private JButton startButton;
private int correctCount;
private int totalCount;
private long startTime;
private boolean isRunning;
public TypingTutor() {
super("Typing Tutor");
inputField = new JTextField(20);
inputField.addKeyListener(this);
outputArea = new JTextArea(10, 40);
outputArea.setEditable(false);
startButton = new JButton("Start");
startButton.addActionListener(this);
JPanel inputPanel = new JPanel();
inputPanel.add(inputField);
inputPanel.add(startButton);
JPanel outputPanel = new JPanel();
outputPanel.add(outputArea);
JPanel statsPanel = new JPanel();
statsPanel.add(new JTextArea("Correct: "));
statsPanel.add(new JTextArea("0"));
statsPanel.add(new JTextArea("Total: "));
statsPanel.add(new JTextArea("0"));
statsPanel.add(new JTextArea("Accuracy: "));
statsPanel.add(new JTextArea("0%"));
JPanel mainPanel = new JPanel(new BorderLayout());
mainPanel.add(inputPanel, BorderLayout.NORTH);
mainPanel.add(outputPanel, BorderLayout.CENTER);
mainPanel.add(statsPanel, BorderLayout.SOUTH);
getContentPane().add(mainPanel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 300);
setVisible(true);
}
public static void main(String[] args) {
new TypingTutor();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == startButton) {
if (!isRunning) {
isRunning = true;
correctCount = 0;
totalCount = 0;
startTime = System.currentTimeMillis();
outputArea.setText("");
inputField.setText("");
inputField.requestFocus();
}
}
}
@Override
public void keyPressed(KeyEvent e) {
if (isRunning) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
String inputText = inputField.getText().trim();
String outputText = outputArea.getText().trim();
if (inputText.equals(outputText)) {
correctCount += inputText.length();
}
totalCount += outputText.length();
inputField.setText("");
outputArea.setText("");
outputArea.append(inputText + "\n");
inputField.requestFocus();
}
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
private void updateStats() {
long elapsedTime = System.currentTimeMillis() - startTime;
int wpm = (int) (60 * correctCount / 5 / (elapsedTime / 1000.0));
int accuracy = totalCount == 0 ? 0 : (int) (100 * correctCount / totalCount);
statsPanel.getComponent(1).setText(String.valueOf(correctCount));
statsPanel.getComponent(3).setText(String.valueOf(totalCount));
statsPanel.getComponent(5).setText(String.valueOf(accuracy) + "%");
}
}
```
这个程序使用了JTextField、JTextArea和JButton等Swing组件,实现了一个类似金山打字通的输入练习程序。用户输入文字后,程序会记录正确的字符数目和总的字符数目,并在计时结束后计算正确率。程序还提供了开始按钮,点击该按钮后可以开始新的练习。