Java GUI 实时字计数器
Java GUI Real Time Word Counter
我查看了人们在开始学习 Java 和 GUI 时所做的示例项目,我遇到了一堆 word/letter 计数程序,例如:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Counter extends JFrame implements ActionListener{
JLabel lb1,lb2;
JTextArea ta;
JButton b;
JButton pad,text;
Counter(){
super("Char Word Count Tool - JTP");
lb1=new JLabel("Characters: ");
lb1.setBounds(50,50,100,20);
lb2=new JLabel("Words: ");
lb2.setBounds(50,80,100,20);
ta=new JTextArea();
ta.setBounds(50,110,300,200);
b=new JButton("Count");
b.setBounds(50,320, 80,30);//x,y,w,h
b.addActionListener(this);
add(lb1);add(lb2);add(ta);add(b);
setSize(400,400);
setLayout(null);//using no layout manager
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==b){
String text=ta.getText();
lb1.setText("Characters: "+text.length());
String words[]=text.split("\s");
lb2.setText("Words: "+words.length);}
}
public static void main(String[] args) {
new Counter();
}}
但我不想在每次单击按钮时都计算字数,而是实时计算,因此值会更新每一帧。我是否需要为此使用多线程,或者没有它也可以实现?
您需要在 JTextArea
上使用 DocumentListener
而不是在 JButton
上使用 ActionListener
。
void test() {
JTextArea textArea = new JTextArea();
textArea.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
recalculateWords();;
}
@Override
public void removeUpdate(DocumentEvent e) {
recalculateWords();
}
@Override
public void changedUpdate(DocumentEvent e) {
recalculateWords();
}
});
}
void recalculateWords() {
//Use your code from actionPerfomed here.
}
我查看了人们在开始学习 Java 和 GUI 时所做的示例项目,我遇到了一堆 word/letter 计数程序,例如:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Counter extends JFrame implements ActionListener{
JLabel lb1,lb2;
JTextArea ta;
JButton b;
JButton pad,text;
Counter(){
super("Char Word Count Tool - JTP");
lb1=new JLabel("Characters: ");
lb1.setBounds(50,50,100,20);
lb2=new JLabel("Words: ");
lb2.setBounds(50,80,100,20);
ta=new JTextArea();
ta.setBounds(50,110,300,200);
b=new JButton("Count");
b.setBounds(50,320, 80,30);//x,y,w,h
b.addActionListener(this);
add(lb1);add(lb2);add(ta);add(b);
setSize(400,400);
setLayout(null);//using no layout manager
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==b){
String text=ta.getText();
lb1.setText("Characters: "+text.length());
String words[]=text.split("\s");
lb2.setText("Words: "+words.length);}
}
public static void main(String[] args) {
new Counter();
}}
但我不想在每次单击按钮时都计算字数,而是实时计算,因此值会更新每一帧。我是否需要为此使用多线程,或者没有它也可以实现?
您需要在 JTextArea
上使用 DocumentListener
而不是在 JButton
上使用 ActionListener
。
void test() {
JTextArea textArea = new JTextArea();
textArea.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
recalculateWords();;
}
@Override
public void removeUpdate(DocumentEvent e) {
recalculateWords();
}
@Override
public void changedUpdate(DocumentEvent e) {
recalculateWords();
}
});
}
void recalculateWords() {
//Use your code from actionPerfomed here.
}