该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个帖子是一年前发的,当时对Java也不是很懂,我看大家都对这个感兴趣,我把代码改了一下,发布出来,其实还有很多的地方还没有完善...,这个只能算一个Demo,有兴趣的可以参考和完善。
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Write {
// 打字文本
private String text;
// 打字文本显示框
private JLabel showText;
// 用户文本输入框
private TextField writer;
// 文本显示框字体
private Font showTextFont;
// 用户文本输入框字体
private Font writerFont;
public Write(String text) {
this.text = text;
init();
}
/**
* 设置文本显示框的字体
*
* @param font
* 字体
*/
public void setShowTextFont(Font font) {
showTextFont = font;
showText.setFont(font);
}
/**
* 设置用户文本输入框的字体
*
* @param font
* 字体
*/
public void setWriterFont(Font font) {
writerFont = font;
writer.setFont(font);
}
/**
* 设置文本显示框字体大小
* @param size 字体大小
*/
public void setShowTextFontSize(int size) {
showTextFont = new Font(showTextFont.getName(),
showTextFont.getStyle(), size);
showText.setFont(showTextFont);
}
/**
* 设置用户文本输入框字体大小
* @param size 字体大小
*/
public void setWriterFontSize(int size) {
writerFont = new Font(writerFont.getName(),
writerFont.getStyle(), size);
writer.setFont(writerFont);
}
/**
* 处理用户输入的文本
*
* @param str
* 用户输入的文本
*/
public void handleInputchange(String str) {
int n = str.length();
// 判断用户输入的长度
if (n > text.length()) {
n = text.length();
}
StringBuilder builder = new StringBuilder();
String w1 = "";
String r1 = "";
String s2 = "";
builder.append("");
for (int i = 0; i < n; i++) {
char c1 = text.charAt(i);
char c2 = str.charAt(i);
if (c1 == c2) {
builder.append(r1);
} else {
builder.append(w1);
}
builder.append(c1);
builder.append(s2);
}
builder.append(text.substring(n, text.length()));
builder.append("");
showText.setText(builder.toString());
}
/**
* 初始化界面
*/
private void init() {
final JFrame frame = new JFrame("练习打字");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pa = new JPanel();
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
frame.setContentPane(pa);
frame.setSize(600, 500);
frame.setLocation(350, 220);
// 初始化文本显示框和用户输入框
showText = new JLabel(text);
writer = new TextField(text.length() * 2);
setShowTextFont(new Font("宋体", Font.BOLD, 30));
setWriterFont(new Font("宋体", Font.BOLD, 30));
p2.add(showText);
p3.add(writer);
pa.setLayout(new GridLayout(3, 1));
pa.add(p1);
pa.add(p2);
pa.add(p3);
// 监听用户输入的变化
writer.addTextListener(new TextListener() {
@Override
public void textValueChanged(TextEvent e) {
TextField t = (TextField) e.getSource();
String str = t.getText();
handleInputchange(str);
}
});
frame.setVisible(true);
}
public static void main(String[] args) {
Write write = new Write("Java技术的强大生命力来自于它所蕴含的面向对象和设计模式思想。");
write.setShowTextFontSize(15);
write.setWriterFontSize(15);
}
}