我有JTextArea
名为taMessage
,显示消息字符串。用户可以在运行时编辑该字符串
我有JLabel lblLength
来显示字符数。我正在使用lblLength.setText(taMessage.getText().length()+"/ 160");
来显示字符数。
我应该为taMessage使用什么事件监听器,以便在我的文本区域中输入文本时,lblLength会不断更新自己?
像我们在way2sms或160by2这样的网站中看到的东西,它显示了剩下的字符数。
答案 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");
}
});