TextField只能输入数字问题 有两种方法:一、你可以判断AscII的值二、使用格式化 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 具体代码可能api有些出入,addKeyListener(new KeyAdapter(){ public void keyTyped(KeyEvent e) { int keyCode = e.getKeyCode(); switch (keyCode) {//判断按下的是哪个键 case KeyEvent.VK_0:...... case KeyEvent.VK_9: break; default: e.consume(); //关键,屏蔽掉非法输入 } }}); 加键盘监听器KeyListener kl = new KeyListener() { public void keyPressed(KeyEvent e) {} public void keyReleased(KeyEvent e) {} public void keyTyped(KeyEvent e) { if (e.getKeyChar() < '0' || e.getKeyChar() > '9') { e.setKeyChar((char)0); return; } }}; your_TextField = new TextField();your_TextField.addKeyListener(kl); 用 JFormattedTextFieldzipField = new JFormattedTextField( createFormatter("#####")); 提供一个全类,完全实现只输入数字/** * <p>Description: JNumberField 数字格式输入框</p> * @version 1.0 */package jujin.common.swing;import jujin.common.base.*;import javax.swing.JFrame;import javax.swing.JTextField;import javax.swing.text.*;import java.awt.*;import java.awt.event.*;/** * 本类为一文本输入对话框,是只充许输入数字格式的文本输入框 */public class JNumberField extends JTextField implements ActionListener, FocusListener { /** * 空构造函数 */ public JNumberField() { this(true); } /** * 带参数构造函数 * @param addAction 是否添加监听 */ public JNumberField(boolean addAction) { this(0, 16, addAction); } /** * 带参数构造函数 * @param declen 小数位长度 */ public JNumberField(int decLen) { this(decLen, true); } /** * 带参数构造函数 * @param declen 小数位长度 * @param addAction 是否添加监听 */ public JNumberField(int decLen, boolean addAction) { this(decLen, 16, addAction); } /** * 带参数构造函数 * @param declen 小数位长度 * @param maxlen 最大长度(含小数位) */ public JNumberField(int decLen, int maxLen) { this(decLen, maxLen, true); } /** * 带参数构造函数 * @param declen 小数位长度 * @param maxlen 最大长度(含小数位) * @param addAction 是否添加监听 */ public JNumberField(int decLen, int maxLen, boolean addAction) { //初始大小 setPreferredSize(new Dimension(150, 25)); setDocument(new NumberDocument(decLen, maxLen)); //右对齐 super.setHorizontalAlignment(JTextField.RIGHT); if (addAction) { addActionListener(this); } //焦点监听 addFocusListener(this); } /** * 带参数构造函数 * @param declen 输入框长度 * @param maxlen 最大长度(含小数位) * @param minRange 最小值 * @param maxRange 最大值 * @param addAction 是否添加监听 */ public JNumberField(int decLen, int maxLen, double minRange, double maxRange, boolean addAction) { setPreferredSize(new Dimension(150, 25)); setDocument(new NumberDocument(decLen, maxLen, minRange, maxRange)); //右对齐 super.setHorizontalAlignment(JTextField.RIGHT); if (addAction) { addActionListener(this); } //焦点监听 addFocusListener(this); } public void actionPerformed(ActionEvent e) { //强制下一控件得到焦点 transferFocus(); } /** * 实现的焦点监听器接口 */ public void focusGained(FocusEvent e) { //选择所有 selectAll(); } public void focusLost(FocusEvent e) { } public static void main(String[] args) { SwingUtil swingUtil = new SwingUtil(); swingUtil.setLookAndFeel(); JFrame frame = new JFrame(); //EXIT_ON_CLOSE == 3 frame.setDefaultCloseOperation(3); frame.setTitle("JNumberField Demo"); frame.getContentPane().setLayout(new FlowLayout()); frame.getContentPane().add(new JNumberField(), BorderLayout.CENTER); frame.getContentPane().add(new JNumberField(10), BorderLayout.CENTER); frame.getContentPane().add(new JNumberField(10, 16), BorderLayout.CENTER); frame.getContentPane().add(new JNumberField(10, 16, -10, 100, false), BorderLayout.CENTER); frame.setSize(400, 320); //swingUtil.setCenter(frame); }}/** * 数字框类 */class NumberDocument extends PlainDocument { int maxLength = 16; int decLength = 0; double minRange = Double.MIN_VALUE; double maxRange = Double.MAX_VALUE; /** * 空构造函数 */ public NumberDocument() {} /** * 带参数构造函数 * @param decLen int 小数位长度 * @param maxLen int 最大长度(含小数位) */ public NumberDocument(int decLen, int maxLen) { maxLength = maxLen; decLength = decLen; } /** * 带参数构造函数 * @param decLen int 小数位长度 * @param maxLen int 最大长度(含小数位) * @param minRange double 最小值 * @param maxRange double 最大值 */ public NumberDocument(int decLen, int maxLen, double minRange, double maxRange) { this(decLen, maxLen); this.minRange = minRange; this.maxRange = maxRange; } /** * 带参数构造函数 * @param decLen int 小数位长度 */ public NumberDocument(int decLen) { decLength = decLen; } /** * 添加字符串 * @param offset - the offset into the document to insert the content >= 0 * @param s - 要插入的字串 * @param a - 联合插入内容的属性 */ public void insertString(int offset, String s, AttributeSet a) throws BadLocationException { int len = getLength(); String str = getText(0, len); int decPos = str.indexOf("."); if ( s.equals("F") || s.equals("f") || s.equals("D") || s.equals("d") || (str + s).length() > maxLength || (decPos > -1 && offset > decPos && ((str.substring(decPos + 1)) + s).length() > decLength) || (str.trim().equals("0") && !s.substring(0, 1).equals(".") && offset != 0) || (s.equals(".") && decLength == 0) || (s.indexOf(".") > -1 && s.substring(s.indexOf(".") + 1).length() > decLength)) { Toolkit.getDefaultToolkit().beep(); return; } try { str = str.substring(0, offset) + s + str.substring(offset, len); if (!str.equals("-") || (str.equals("-") && minRange <= 0)) { double d = Double.parseDouble(str); if (d < minRange || d > maxRange) { throw new Exception(); } } } catch (Exception e) { Toolkit.getDefaultToolkit().beep(); return; } super.insertString(offset, s, a); }} 刚学习JAVA,正好看到这里,希望对你有帮助 textField.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent event) { char ch=event.getKeyChar(); if(ch<'0'||ch>'9') event.consume; } }});摘于CoreJava第五版P308 event.consume();落了一对括号 eclipse-visualeditor swing 图像按钮激活状态与不激活状态选择不同图像的问题 关于Swing JTable和Renderer,BasicTableUI,TableModel之间的相互关系 数据库连接异常,怎么看sql2000端口号 送分的小问题 什么组件可以实现即能折行,又能设置居中? 问一个有关Static Initialization的问题 如何利用反射调用构造函数 有谁能给讲解一下为什么createImage()不能在Applet的init()中创建?或者是由于java本身的不足 请问JAVA如何读写注册表 求strutc资料下载 高手救命,小小问题,看看就好
public void keyTyped(KeyEvent e) {
int keyCode = e.getKeyCode();
switch (keyCode) {//判断按下的是哪个键
case KeyEvent.VK_0:......
case KeyEvent.VK_9:
break;
default:
e.consume(); //关键,屏蔽掉非法输入
}
}
});
public void keyPressed(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {
if (e.getKeyChar() < '0' ||
e.getKeyChar() > '9') {
e.setKeyChar((char)0);
return;
}
}
};
your_TextField = new TextField();
your_TextField.addKeyListener(kl);
createFormatter("#####"));
* <p>Description: JNumberField 数字格式输入框</p>
* @version 1.0
*/package jujin.common.swing;import jujin.common.base.*;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;/**
* 本类为一文本输入对话框,是只充许输入数字格式的文本输入框
*/
public class JNumberField extends JTextField
implements ActionListener, FocusListener
{
/**
* 空构造函数
*/
public JNumberField()
{
this(true);
}
/**
* 带参数构造函数
* @param addAction 是否添加监听
*/
public JNumberField(boolean addAction)
{
this(0, 16, addAction);
}
/**
* 带参数构造函数
* @param declen 小数位长度
*/
public JNumberField(int decLen)
{
this(decLen, true);
} /**
* 带参数构造函数
* @param declen 小数位长度
* @param addAction 是否添加监听
*/
public JNumberField(int decLen, boolean addAction)
{
this(decLen, 16, addAction);
}
/**
* 带参数构造函数
* @param declen 小数位长度
* @param maxlen 最大长度(含小数位)
*/
public JNumberField(int decLen, int maxLen)
{
this(decLen, maxLen, true);
}
/**
* 带参数构造函数
* @param declen 小数位长度
* @param maxlen 最大长度(含小数位)
* @param addAction 是否添加监听
*/
public JNumberField(int decLen, int maxLen, boolean addAction)
{
//初始大小
setPreferredSize(new Dimension(150, 25));
setDocument(new NumberDocument(decLen, maxLen));
//右对齐
super.setHorizontalAlignment(JTextField.RIGHT);
if (addAction)
{
addActionListener(this);
}
//焦点监听
addFocusListener(this);
}
/**
* 带参数构造函数
* @param declen 输入框长度
* @param maxlen 最大长度(含小数位)
* @param minRange 最小值
* @param maxRange 最大值
* @param addAction 是否添加监听
*/
public JNumberField(int decLen, int maxLen, double minRange, double maxRange,
boolean addAction)
{
setPreferredSize(new Dimension(150, 25));
setDocument(new NumberDocument(decLen, maxLen, minRange, maxRange));
//右对齐
super.setHorizontalAlignment(JTextField.RIGHT);
if (addAction)
{
addActionListener(this);
}
//焦点监听
addFocusListener(this);
} public void actionPerformed(ActionEvent e)
{
//强制下一控件得到焦点
transferFocus();
} /**
* 实现的焦点监听器接口
*/
public void focusGained(FocusEvent e)
{
//选择所有
selectAll();
} public void focusLost(FocusEvent e)
{
} public static void main(String[] args)
{
SwingUtil swingUtil = new SwingUtil();
swingUtil.setLookAndFeel();
JFrame frame = new JFrame();
//EXIT_ON_CLOSE == 3
frame.setDefaultCloseOperation(3);
frame.setTitle("JNumberField Demo");
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(new JNumberField(), BorderLayout.CENTER);
frame.getContentPane().add(new JNumberField(10), BorderLayout.CENTER);
frame.getContentPane().add(new JNumberField(10, 16), BorderLayout.CENTER);
frame.getContentPane().add(new JNumberField(10, 16, -10, 100, false),
BorderLayout.CENTER);
frame.setSize(400, 320);
//swingUtil.setCenter(frame);
}}/**
* 数字框类
*/
class NumberDocument extends PlainDocument
{
int maxLength = 16;
int decLength = 0;
double minRange = Double.MIN_VALUE;
double maxRange = Double.MAX_VALUE;
/**
* 空构造函数
*/
public NumberDocument() {}
/**
* 带参数构造函数
* @param decLen int 小数位长度
* @param maxLen int 最大长度(含小数位)
*/
public NumberDocument(int decLen, int maxLen)
{
maxLength = maxLen;
decLength = decLen;
} /**
* 带参数构造函数
* @param decLen int 小数位长度
* @param maxLen int 最大长度(含小数位)
* @param minRange double 最小值
* @param maxRange double 最大值
*/
public NumberDocument(int decLen, int maxLen, double minRange,
double maxRange)
{
this(decLen, maxLen);
this.minRange = minRange;
this.maxRange = maxRange;
}
/**
* 带参数构造函数
* @param decLen int 小数位长度
*/
public NumberDocument(int decLen)
{
decLength = decLen;
}
/**
* 添加字符串
* @param offset - the offset into the document to insert the content >= 0
* @param s - 要插入的字串
* @param a - 联合插入内容的属性
*/
public void insertString(int offset, String s, AttributeSet a) throws
BadLocationException
{
int len = getLength();
String str = getText(0, len);
int decPos = str.indexOf(".");
if (
s.equals("F") || s.equals("f") || s.equals("D") || s.equals("d")
|| (str + s).length() > maxLength || (decPos > -1 && offset > decPos
&& ((str.substring(decPos + 1)) + s).length() > decLength)
|| (str.trim().equals("0") && !s.substring(0, 1).equals(".")
&& offset != 0) || (s.equals(".") && decLength == 0)
|| (s.indexOf(".") > -1
&& s.substring(s.indexOf(".") + 1).length() > decLength))
{
Toolkit.getDefaultToolkit().beep();
return;
}
try
{
str = str.substring(0, offset) + s + str.substring(offset, len);
if (!str.equals("-") || (str.equals("-") && minRange <= 0))
{
double d = Double.parseDouble(str);
if (d < minRange || d > maxRange)
{
throw new Exception();
}
}
}
catch (Exception e)
{
Toolkit.getDefaultToolkit().beep();
return;
}
super.insertString(offset, s, a);
}}
textField.addKeyListener(new
KeyAdapter()
{
public void keyTyped(KeyEvent event)
{
char ch=event.getKeyChar();
if(ch<'0'||ch>'9')
event.consume;
}
}
});
摘于CoreJava第五版P308
落了一对括号