比如值允许输入6个字符
解决方案 »
- 关于java的异常机制问题
- JAVA界面布置的问题
- getLocation()带参数的问题
- 线程和数据库??
- 再问一个字符串的问题,在线等!谢谢
- 对方没有jvm怎么办?
- [求助]Java 安全套接字编程中SSLContext如果不指定keymanager也不指定trustmanager,意义何在?
- 请问:在一个Frame里显示一个JInternalFrame,想把JInternalFrame位置固定到Frame的右上?
- 简单问题:如何是主进程停止运行若干长时间?
- 对数据方面一窍不通,对于java来说应该学数据库的那些东西,SQL语句,或着一种开发工具MSSQLserver,Oracle,MySql大家能不能给我点建议,推荐
- 关于位移运算符的疑惑(>> 与 >>> )
- 二叉树问题
把columns设为6 就可以了.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.text.MaskFormatter;public class T {
public static void main(String[] args) throws ParseException {
final JFormattedTextField tf =
new JFormattedTextField(new MaskFormatter("******"));
JFrame f = new JFrame();
f.getContentPane().add(tf, BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
中的columns并不能保证只能输入columns个字符,只是一个基准,会根据你的布局相应增加或减少字符。
{
//是否支持有符号数
boolean isSignedNumber = false;
//数据的上限
float fMaxNum = 0.0f;
//数的下限
float fMinNum = 0.0f; private NumDoc doc = null; private float fDefaultNum = 0.0f;
public NumberTextField()
{
super();
doc = new NumDoc(this);
setDocument(doc);
addDefaultFocusAdapter();
}
public NumberTextField(int len)
{
super(len);
doc = new NumDoc(this);
setDocument(doc);
addDefaultFocusAdapter();
}
public NumberTextField(float val, int len)
{
super(len);
doc = new NumDoc(this);
setDocument(doc);
setFloatValue(val);
addDefaultFocusAdapter();
}
//设定输入数据的范围
public void setLimitedValues(float minVal, float maxVal)
{
if(minVal > maxVal)
{
new NumberFormatException("Min value must be little than x value").printStackTrace();
}
fMaxNum = maxVal;
fMinNum = minVal;
fDefaultNum = minVal;
}
public void setLimitedValues(float minVal, float maxVal, float fDefaultVal)
{
if (minVal > maxVal)
{
new NumberFormatException("Min value must be little than Max value").printStackTrace();
}
fMaxNum = maxVal;
fMinNum = minVal;
fDefaultNum = fDefaultVal;
}
}
class NumDoc extends PlainDocument
{
NumberTextField numField; public NumDoc(NumberTextField field)
{
numField = field;
} public void insertString(int offset, String str, AttributeSet attr)
throws BadLocationException
{
//判断是否可以插入字串.
boolean isAccept = true;
float val = 0.0f;
int len = getLength();
//使用StringBuffer, 修改插入的部分的bug
StringBuffer buffer = new StringBuffer(getText(0, len));
buffer.insert(offset, str);
String text = buffer.toString();
if(text.equals("-"))
{
isAccept = numField.isSignedNumber;
}else
{
try
{
val = Float.parseFloat(text);
}catch(NumberFormatException e)
{
isAccept = false;
}
} if(isAccept && numField.isSignedNumber == false)
{
if(val < 0)
isAccept = false;
} if(isAccept && !numField.isDecimalSupport)
{
if(text.indexOf('.') != -1 || text.indexOf('d') != -1
|| text.indexOf('D') != -1 || text.indexOf('f') != -1
|| text.indexOf('F') != -1)
{
isAccept = false;
}
}
if(isAccept && numField.isLimitedSupport)
{
if(!isInScope(val))
isAccept = false;
} if(isAccept)
{
super.insertString(offset, str, attr);
}else
{
Toolkit.getDefaultToolkit().beep();
}
} private boolean isInScope(float val)
{
boolean bRet = true; if(numField.fMinNum > 0)
{
if(val > numField.fMaxNum)
bRet = false;
}
else if(numField.fMaxNum < 0)
{
if(val < numField.fMinNum)
bRet = false;
}else
{
if((val < numField.fMinNum) || (val > num.fMaxNum))
bRet = false;
}
return bRet;
}
} private void addDefaultFocusAdapter()
{
addFocusListener(new java.awt.event.FocusListener()
{
public void focusGained(java.awt.event.FocusEvent e)
{
selectAll();
}
public void focusLost(java.awt.event.FocusEvent e)
{
}
});
}
textField.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
if (textField.getText().length() > 指定长度 && e.getKeyChar() != '\b')
e.setKeyChar('\0');
} public void keyPressed(KeyEvent e) {
} public void keyReleased(KeyEvent e) {
}
});我以用它好多年 :-)