在摇摆gui中显示字符数

时间:2013-07-01 14:30:00

标签: java swing event-listener

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

我应该为taMessage使用什么事件监听器,以便在我的文本区域中输入文本时,lblLength会不断更新自己?

像我们在way2sms或160by2这样的网站中看到的东西,它显示了剩下的字符数。

3 个答案:

答案 0 :(得分:4)

Swing文本字段和文本区域由名为Document的类支持,该类可以附加文档侦听器。

官方文档有一个不错的tutorial on Document Listeners

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

答案 1 :(得分:3)

以类似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) {
     }
}

答案 2 :(得分:0)

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");
    }
});