2012-05-18 回答
java swing中利用jformattedtextfield的控件加keyreleased能实现,以下实现的只能输入数字的文本框代码:
import java.text.parseexception;
import javax.swing.jformattedtextfield;
import javax.swing.jframe;
import javax.swing.jpanel;
/**
*
* @author administrator
*/
public class jformattedtext extends jframe {
private jformattedtextfield text;
public jformattedtext() {
jpanel panel = new jpanel();
text = new jformattedtextfield(new java.text.decimalformat("#0"));
// text = new jformattedtextfield();
// text.setformatterfactory(new javax.swing.text.defaultformatterfactory(new javax.swing.text.numberformatter(new java.text.decimalformat("#0"))));
text.setfont(new java.awt.font("宋体", 0, 12)); // noi18n
text.setmaximumsize(new java.awt.dimension(50, 21));
text.setminimumsize(new java.awt.dimension(50, 21));
text.setpreferredsize(new java.awt.dimension(50, 21));
//过滤输入的字符
text.addkeylistener(new java.awt.event.keyadapter() {
public void keyreleased(java.awt.event.keyevent evt) {
string old = text.gettext();
jformattedtextfield.abstractformatter formatter = text.getformatter();
if (!old.equals("")) {
if (formatter != null) {
string str = text.gettext();
try {
long page = (long) formatter.stringtovalue(str);
text.settext(page + "");
} catch (parseexception pe) {
text.settext("1");//解析异常直接将文本框中值设置为1
}
}
}
}
});
panel.add(text);
this.add(panel);
this.setbounds(200, 100, 100, 100);
}
public static void main(string[] arg) {
new jformattedtext().setvisible(true);
}
}