Java GUI 实时字数计数器

Posted

技术标签:

【中文标题】Java GUI 实时字数计数器【英文标题】:Java GUI Real Time Word Counter 【发布时间】:2022-01-15 16:20:05 【问题描述】:

我正在查看人们在开始学习 Java 和 GUI 时所做的示例项目,我遇到了一堆单词/字母计数程序,例如:

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();
    

但我不想在每次单击按钮时计算字数,而是实时计算,因此值会更新每一帧。我是否需要为此使用多线程,或者没有它也可以实现?

【问题讨论】:

1) “想实时统计单词..” 添加DocumentListener。对文本区域的每次更改都会触发该操作。 2)setLayout(null);//using no layout manager 使用。布局。 3) 使用布局时,将ta=new JTextArea(); 更改为ta=new JTextArea(rows, columns); 以建议尺寸。 我相信不需要多线程(除非字数统计太慢)。顺便说一句,这不是最好的例子:扩展 JFrame 或任何其他 Swing 组件,但不更改或扩展其功能,仅使用它,恕我直言,这是不好的做法 【参考方案1】:

您需要在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.

【讨论】:

另见How to Write a Document Listener 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于Java GUI 实时字数计数器的主要内容,如果未能解决你的问题,请参考以下文章

JAVA GUI制作一个简易计算器

减少单词列表,将元组计数到聚合键

带Jquery的实时字符计数表

Python Qt GUI设计:QSpinBox计数器类(基础篇—15)

Python Qt GUI设计:QSpinBox计数器类(基础篇—15)

实时字符计数器