重写JTextField控件,控制JTextField长度和只能在JTextField中输入数字 求高手帮忙啊重写JTextField控件,只能在JTextField中输入数字 用正则表达式 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 LZ不妨参考下这个.try { MaskFormatter formatter=new MaskForamtter("###-#######"); formatter.setPlaceholderCharacter('0'); JFormattedTextField ftField=new JFormattedTextField(formatter); ftField.setValue("012-3456789"); ........ }catch(ParseException e){e.printStackTrace();} 如果你只是限制输入数字的话,用不着RE啊,简单地用Integer.parse不就ok啦? 如果你非要用JTextField,也有很多方法,比如:使用自定义的Document、用InputVerifier、用Document Filter。可以参考 这里 参考一下这个吧import java.awt.Dimension;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import javax.swing.JFrame;import javax.swing.JTextField;public class test1 extends JFrame {public test1(){ this.setLayout(null); this.setSize(new Dimension(400,200)); JTextField txt=new JTextField(); txt.addKeyListener(new KeyAdapter(){ public void keyTyped(KeyEvent e){ char c = e.getKeyChar(); if(Character.isDigit(c) || c==KeyEvent.VK_BACK_SPACE || c==KeyEvent.VK_DELETE) return; e.consume(); } }); txt.setBounds(50, 50, 120, 20); this.add(txt); this.setVisible(true);}public static void main(String args[]){ new test1();}} 这个可以直接拿去用import java.awt.Toolkit;import javax.swing.JTextField;import javax.swing.text.AttributeSet;import javax.swing.text.BadLocationException;import javax.swing.text.Document;import javax.swing.text.PlainDocument;/** * 只允许输入数字的JTextField * @author 003 */public class JNumberField extends JTextField{ /** * serialVersionUID */ private static final long serialVersionUID = -2732387087480277531L; /** * 最大值 */ private int maxValue = Integer.MAX_VALUE; /** * 最小值 */ private int minValue = Integer.MIN_VALUE; /** * 宽度 */ private int maxLength = 0; /** * 构造方法 最大宽度 * @param maxLength */ public JNumberField(int maxLength) { this(maxLength, Integer.MIN_VALUE, Integer.MAX_VALUE); } /** * 构造方法 * @param minValue 最小值 * @param maxValue 最大值 */ public JNumberField(int minValue, int maxValue) { this(0, minValue, maxValue); } /** * 构造方法 * @param maxLength 最大宽度 * @param minValue 最小值 * @param maxValue 最大值 */ public JNumberField(int maxLength, int minValue, int maxValue) { super(); this.maxLength = maxLength; this.minValue = minValue; this.maxValue = maxValue; } /** * 设置最大值 * @param maxValue 最大值 */ public void setMaxValue(int maxValue) { this.maxValue = maxValue; } /** * 获取最大值 * @return 最大值 */ protected int getMaxValue() { return this.maxValue; } /** * 设置最小值 * @param minValue 最小值 */ public void setMinValue(int minValue) { this.minValue = minValue; } /** * 获取最小值 * @return 最小值 */ protected int getMinValue() { return this.minValue; } /** * 获取当前值 * @return 当前值 */ public int getValue() { int retVal = 0; try { retVal = Integer.parseInt(getText()); if(retVal > maxValue) { retVal = maxValue; } else if(retVal < minValue) { retVal = minValue; } } catch(NumberFormatException e) { retVal = 0; } return (new Integer(retVal)).intValue(); } /** * 设置当前值 * @param value 当前值 */ public void setValue(Object value) { if(value == null || value.equals("")) { setText("0"); } else { setText(value.toString()); } } /** * 创建缺省模板 */ protected Document createDefaultModel() { return new NumberDocument(this); } /** * 文本控制类 * @author 003 */ protected class NumberDocument extends PlainDocument { /** * serialVersionUID */ private static final long serialVersionUID = -5643002098563548951L; /** * NumberField对象 */ JNumberField field; /** * 构造方法 * @param field NumberField对象 */ public NumberDocument(JNumberField field) { this.field = field; } /** * 插入规则 */ public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { if(str == null || str.equals("")) { return; } char[] source = str.toCharArray(); char[] result = new char[source.length]; int j = 0; for(int i = 0; i < result.length; i++) { if(Character.isDigit(source[i])) { result[j++] = source[i]; } else { Toolkit.getDefaultToolkit().beep(); } } StringBuffer sb = new StringBuffer(); sb.append(field.getText()); sb.insert(offs, new String(result, 0, j)); try { int value = Integer.parseInt(sb.toString()); boolean flag1 = maxLength > 0 && this.getLength() < maxLength && value <= field.getMaxValue() && value >= field.getMinValue(); boolean flag2 = maxLength == 0 && value <= field.getMaxValue() && value >= field.getMinValue(); if(flag1 || flag2) { super.insertString(offs, new String(result, 0, j), a); } } catch(NumberFormatException ex) {} } }} 求java趣味案例或趣味题,在线等 java虚拟机 关于服务器Socket关闭的问题 sqlserver問題 在WINDOWS下面,如过不配置ODBC数据源,怎么做数据库操作. 我有两个filter.一个是用来检验登录的.一个是检验权限的.(不想合并在一起).我如何在web.xml中确定他们被访问的顺序? 关于格式化输出 我想学习JAVA,请问应该怎样搭建开发环境? 那位大哥告诉我一些能下载java好书的网站!(万分感谢!) 问一个关于聊天程序服务器多线程的问题 java 内部类问题 请高手帮忙 大家帮忙做个界面吧-----如图
try
{
MaskFormatter formatter=new MaskForamtter("###-#######");
formatter.setPlaceholderCharacter('0');
JFormattedTextField ftField=new JFormattedTextField(formatter);
ftField.setValue("012-3456789");
........
}catch(ParseException e){e.printStackTrace();}
使用自定义的Document、用InputVerifier、用Document Filter。
可以参考 这里
import java.awt.Dimension;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class test1 extends JFrame {
public test1(){
this.setLayout(null);
this.setSize(new Dimension(400,200));
JTextField txt=new JTextField();
txt.addKeyListener(new KeyAdapter(){
public void keyTyped(KeyEvent e){
char c = e.getKeyChar();
if(Character.isDigit(c) || c==KeyEvent.VK_BACK_SPACE || c==KeyEvent.VK_DELETE)
return;
e.consume();
}
});
txt.setBounds(50, 50, 120, 20);
this.add(txt);
this.setVisible(true);}
public static void main(String args[]){
new test1();
}
}
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;/**
* 只允许输入数字的JTextField
* @author 003
*/
public class JNumberField extends JTextField
{
/**
* serialVersionUID
*/
private static final long serialVersionUID = -2732387087480277531L; /**
* 最大值
*/
private int maxValue = Integer.MAX_VALUE; /**
* 最小值
*/
private int minValue = Integer.MIN_VALUE; /**
* 宽度
*/
private int maxLength = 0; /**
* 构造方法 最大宽度
* @param maxLength
*/
public JNumberField(int maxLength)
{
this(maxLength, Integer.MIN_VALUE, Integer.MAX_VALUE);
} /**
* 构造方法
* @param minValue 最小值
* @param maxValue 最大值
*/
public JNumberField(int minValue, int maxValue)
{
this(0, minValue, maxValue);
}
/**
* 构造方法
* @param maxLength 最大宽度
* @param minValue 最小值
* @param maxValue 最大值
*/
public JNumberField(int maxLength, int minValue, int maxValue)
{
super();
this.maxLength = maxLength;
this.minValue = minValue;
this.maxValue = maxValue;
} /**
* 设置最大值
* @param maxValue 最大值
*/
public void setMaxValue(int maxValue)
{
this.maxValue = maxValue;
} /**
* 获取最大值
* @return 最大值
*/
protected int getMaxValue()
{
return this.maxValue;
} /**
* 设置最小值
* @param minValue 最小值
*/
public void setMinValue(int minValue)
{
this.minValue = minValue;
} /**
* 获取最小值
* @return 最小值
*/
protected int getMinValue()
{
return this.minValue;
} /**
* 获取当前值
* @return 当前值
*/
public int getValue()
{
int retVal = 0; try
{
retVal = Integer.parseInt(getText()); if(retVal > maxValue)
{
retVal = maxValue;
}
else if(retVal < minValue)
{
retVal = minValue;
}
}
catch(NumberFormatException e)
{
retVal = 0;
} return (new Integer(retVal)).intValue();
} /**
* 设置当前值
* @param value 当前值
*/
public void setValue(Object value)
{
if(value == null || value.equals(""))
{
setText("0");
}
else
{
setText(value.toString());
}
} /**
* 创建缺省模板
*/
protected Document createDefaultModel()
{
return new NumberDocument(this);
} /**
* 文本控制类
* @author 003
*/
protected class NumberDocument extends PlainDocument
{
/**
* serialVersionUID
*/
private static final long serialVersionUID = -5643002098563548951L; /**
* NumberField对象
*/
JNumberField field; /**
* 构造方法
* @param field NumberField对象
*/
public NumberDocument(JNumberField field)
{
this.field = field;
} /**
* 插入规则
*/
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException
{
if(str == null || str.equals(""))
{
return;
} char[] source = str.toCharArray();
char[] result = new char[source.length]; int j = 0; for(int i = 0; i < result.length; i++)
{
if(Character.isDigit(source[i]))
{
result[j++] = source[i];
}
else
{
Toolkit.getDefaultToolkit().beep();
}
} StringBuffer sb = new StringBuffer();
sb.append(field.getText());
sb.insert(offs, new String(result, 0, j)); try
{
int value = Integer.parseInt(sb.toString());
boolean flag1 = maxLength > 0 && this.getLength() < maxLength && value <= field.getMaxValue() && value >= field.getMinValue();
boolean flag2 = maxLength == 0 && value <= field.getMaxValue() && value >= field.getMinValue();
if(flag1 || flag2)
{
super.insertString(offs, new String(result, 0, j), a);
}
}
catch(NumberFormatException ex)
{}
}
}
}