日期:2014-05-20  浏览次数:20717 次

如何提示文本框中还有多少字符可用
写了一段代码,有几个地方搞不明白
1.定义的MyDocumentListener类怎么可以调用类Test13中的成员变量JLabel,然后使用setText,除了像我这样加上static还能怎么办;
2.我定义的JTextField长度应该是10个字符,为什么最后还是会继续加字符在后面,怎么能让他不再在后面追加
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.AbstractDocument;
import javax.swing.text.Document;
import javax.swing.text.JTextComponent;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Test13 extends JFrame{
JPanel panel;
static JTextField textField;
static JLabel label;
public Test13(){
super("字符输入");
textField=new JTextField(10);
AbstractDocument doc=(AbstractDocument) textField.getDocument();
doc.addDocumentListener(new MyDocumentListener(10));
label=new JLabel();
panel=new JPanel();
panel.add(textField);
panel.add(label);
this.add(panel);
setVisible(true);
setSize(1000,500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[]){
new Test13();
}
}
class MyDocumentListener implements DocumentListener{
int maxLength;
public MyDocumentListener(int maxLength){
this.maxLength=maxLength;
}
@Override
public void insertUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
display(e);
}

@Override
public void removeUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
display(e);
}

@Override
public void changedUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
display(e);
}
public void display(DocumentEvent e){
Document doc=e.getDocument();
int docLength=doc.getLength();
if(maxLength-docLength<0){
JOptionPane.showMessageDialog(null, "字数已达上限");
}
else Test13.label.setText("总长度为"+maxLength+"剩下字符"+(maxLength-docLength));
}
}

------解决方案--------------------
字符已经增加了,所以才能判断上去,你只是提示字符超出长度,并没有不允许增加字符。这个需要记录下上次字符串,超出还原原来的内容。
其实还有一种方法就是监听键盘按下事件,如果已经达到最高长度,那么所有的输入字符都应该被consume()掉,当然左右键 退回键 删除键不增加字符,不应当被屏蔽.
------解决方案--------------------
个人意见:一:MyDocumentListener类可以传递参数,
          二:重写JTextField类,或者像楼上加上监听事件