繁体   English   中英

在Swing GUI中显示字符数

[英]show character count in swing gui

我有一个名为taMessageJTextArea ,它显示消息字符串。 用户可以在运行时编辑此字符串。
我有一个JLabel lblLength来显示字符数。 我正在使用lblLength.setText(taMessage.getText().length()+"/ 160"); 显示字符数。

我应该为taMessage使用哪个事件侦听器,以便在我在文本区域中键入文本时,lblLength能够不断更新自身?

就像我们在way2sms或160by2这样的站点中看到的那样,它显示了剩余的字符数。

Swing文本字段和文本区域由名为Document的类支持,该类可以附加有Document Listener。

官方文档在文档监听器上有不错的教程

您可能希望附加文档侦听器,并且由于您对字符计数感兴趣,因此您只想使用上面使用的相同代码在所有三个文档侦听器的回调方法中初始化标签。

以类似于MVC的方式,您可以收听文档的更改。

JTextArea ta = ...;
JLabel lblLength = ...;
Document taDoc = ta.getDocument();
taDoc.addDocumentListener(new CharacterCounterDocumentListener(lblLength))


public class CharacterCounterDocumentListener implements DocumentListener {

     private JLabel counterLabel;        

     public CharacterCounterDocumentListener(JLabel counterLabel){
         this.counterLabel = counterLabel;
     }

     public void changedUpdate(DocumentEvent e) {
        Document d = e.getDocument();
        int length = d.getLength();
        counterLabel.setText(Integer.toString(length));
     }
     public void insertUpdate(DocumentEvent e)  {
     }
     public void removeUpdate(DocumentEvent e) {
     }
}

DocumentListener可能是您最好的选择。 您甚至不需要创建新类,只需内联定义它即可。

// Listen for changes in the text
taMessage.getDocument().addDocumentListener(new DocumentListener() {
    public void changedUpdate(DocumentEvent e) {
        update();
    }

    public void removeUpdate(DocumentEvent e) {
        update();
    }

    public void insertUpdate(DocumentEvent e) {
        update();
    }

    public void update() {
        lblLength.setText(taMessage.getText().length()+"/ 160");
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM