怎样让一个输入框只能输入数字? 我自己编了一个小窗口,窗口内用一个JTextField接收用户输入,现在我只想让用户输入数字,就是屏蔽其他键盘输入。请问有什么已有的函数可以使用吗?谢谢各位了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 也可以迂回一点,在输入后 你往数字上转,如果不能转换成数字 那就出个异常然后再catch里 做相应的操作 import javax.swing.JTextField;import javax.swing.text.AttributeSet;import javax.swing.text.BadLocationException;import javax.swing.text.Document;import javax.swing.text.PlainDocument;public class NumberField extends JTextField { public NumberField(int cols) { super(cols); } protected Document createDefaultModel() { return new NumberDocument(); } static class NumberDocument extends PlainDocument { public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { if (str == null) { return; } char[] upper = str.toCharArray(); char[] temp = new char[upper.length]; for (int i = 0; i < upper.length; i++) { if(upper[i] >= '0' && upper[i] <= '9') { temp[i] = upper[i]; } } super.insertString(offs, new String(temp).trim(), a); } } }借用官方的API文档中的一个小例子,简单改了一下!用NumberField 代替你的JTextField,就可以只输入数字了。 监听事件 会吧判断如果不是 1~9 就把当前Jtext值从新设置成原来状态(用一个temp保存以前的字符) <input name="ps_person_id" size="26" maxlength="18" onKeyDown="if(event.keyCode==13)event.keyCode=9" onKeyPress="if ((event.keyCode<48 || event.keyCode>57)) event.returnValue=false"><FONT color=#006699>*请输入18位数字</FONT> 勉强可以用import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import javax.swing.JFrame;import javax.swing.JTextField;public class WindowTest extends JFrame { private static final long serialVersionUID = -3536657964686715631L; public WindowTest() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTextField textField = new JTextField(); textField.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { JTextField source = (JTextField) e.getSource(); String oldText = source.getText(); StringBuilder sbText = new StringBuilder(oldText); for (int i = sbText.length() - 1; i > -1; i--) { char c = sbText.charAt(i); if (c < '0' || c > '9') { // 删除无效字符 sbText.delete(i, i + 1); } } String newText = sbText.toString(); if (!newText.equals(oldText)) { source.setText(sbText.toString()); } } }); getContentPane().add(textField); setBounds(400, 300, 200, 57); } public static void main(String[] args) { new WindowTest().setVisible(true); }} 还是用numberfield方便用正则表达式有点麻烦要监听键盘输入,而且如果碰到复制进去的字符就有问题了 import java.awt.Dimension;/** * <p>Title: OpenSwing</p> * <p>Description: JIntTextField 只能输入整数的文本框</p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: </p> * @author SunKing</a> * @version 1.0 */public class JIntTextField extends JTextField{ class IntOnlyDocument extends PlainDocument { public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { if(str == null) return; char number[] = str.toCharArray(); for(int i = 0; i < number.length; i++) { if(offs == 0) { if(number[i] < '0' || number[i] > '9') { if(offs == length - 1) remove(offs + i, 1); else return; } else { length++; } continue; } if(!haveDot) { if((number[i] < '0' || number[i] > '9') && number[i] != '.') { if(offs == length - 1) remove(offs + i, 1); else return; continue; } if(number[i] == '.') haveDot = true; length++; continue; } if(number[i] < '0' || number[i] > '9') { if(offs == length - 1) { remove(offs + i, 1); } else { Toolkit.getDefaultToolkit().beep(); return; } } else { length++; } } super.insertString(offs, new String(number), a); } private boolean haveDot; private int length; IntOnlyDocument() { haveDot = true; length = 0; } } public JIntTextField(int cols) { super(cols); isLimit = false; } public JIntTextField(int cols, int max, int min) { super(cols); isLimit = false; if(max > min) { MAX = max; MIN = min; isLimit = true; } } public void setRange(int max, int min) { if(max > min) { MAX = max; MIN = min; isLimit = true; } } /** * 主函数\u2014\u2014测试 * @param args String[] */ public static void main(String args[]) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(Exception exception) { } JFrame frame = new JFrame(); frame.setTitle("JNumberField Demo"); frame.getContentPane().setLayout(new FlowLayout()); frame.getContentPane().add(new JIntTextField(10), "Center"); frame.setSize(400, 320); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2); frame.setVisible(true); } protected Document createDefaultModel() { return new IntOnlyDocument(); } private int MAX; private int MIN; private boolean isLimit;}直接运行,希望对你有帮助 文本框只能输入数字代码:<input type="text" value="" onkeyup="this.value=this.value.replace(/\D/g,'')" /> 文本修改会触发事件,写一个事件方法public void onKeyDown(Event event) { System.out.println(event.character); if(!(event.character>='0' &&event.character<='9') ){ event.keyCode=0; event.doit=false; } } 用正则表达式String str = JOptionPane.showInputDialog("请输入要排序的数:"); Matcher m=Pattern.compile("(\\d{"+str.length()+"})").matcher(str); if(m.matches()){ System.out.println("输入的是数字 "+m.group(1)); } else { System.out.println("输入的含有字母" + str); } 为什么这段代码运行输出是这样的东西? java 一道笔试题目 编写连接数据库类的写法问题? 简单问题:怎么取小数点后两位? 关于JDK的问题,帮忙看一下,多谢啦。 怎么实现JButton的拖拽啊 ??? JButton字体大小的问题 如何以重试多次代替异常 打算今天开始学习 JAVA,各位Java前辈指教! 为什么Main Thread没有被notify? 抛出异常的问题 用Java写C语言词法分析器的时候遇到一个困难的问题
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;public class NumberField extends JTextField {
public NumberField(int cols) {
super(cols);
}
protected Document createDefaultModel() {
return new NumberDocument();
}
static class NumberDocument extends PlainDocument {
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (str == null) {
return;
}
char[] upper = str.toCharArray();
char[] temp = new char[upper.length];
for (int i = 0; i < upper.length; i++) {
if(upper[i] >= '0' && upper[i] <= '9') {
temp[i] = upper[i];
}
}
super.insertString(offs, new String(temp).trim(), a);
}
}
}借用官方的API文档中的一个小例子,简单改了一下!用NumberField 代替你的JTextField,就可以只输入数字了。
<input name="ps_person_id" size="26" maxlength="18" onKeyDown="if(event.keyCode==13)event.keyCode=9" onKeyPress="if ((event.keyCode<48 || event.keyCode>57)) event.returnValue=false"><FONT color=#006699>*请输入18位数字</FONT>
import java.awt.event.KeyEvent;import javax.swing.JFrame;
import javax.swing.JTextField;public class WindowTest extends JFrame { private static final long serialVersionUID = -3536657964686715631L; public WindowTest() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField textField = new JTextField(); textField.addKeyListener(new KeyAdapter() { @Override
public void keyReleased(KeyEvent e) {
JTextField source = (JTextField) e.getSource();
String oldText = source.getText();
StringBuilder sbText = new StringBuilder(oldText);
for (int i = sbText.length() - 1; i > -1; i--) {
char c = sbText.charAt(i);
if (c < '0' || c > '9') {
// 删除无效字符
sbText.delete(i, i + 1);
}
} String newText = sbText.toString();
if (!newText.equals(oldText)) {
source.setText(sbText.toString());
}
} }); getContentPane().add(textField);
setBounds(400, 300, 200, 57);
} public static void main(String[] args) {
new WindowTest().setVisible(true);
}
}
还是用numberfield方便
用正则表达式有点麻烦
要监听键盘输入,
而且如果碰到复制进去的
字符就有问题了
/**
* <p>Title: OpenSwing</p>
* <p>Description: JIntTextField 只能输入整数的文本框</p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author SunKing</a>
* @version 1.0
*/
public class JIntTextField extends JTextField
{
class IntOnlyDocument extends PlainDocument
{ public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException
{
if(str == null)
return;
char number[] = str.toCharArray();
for(int i = 0; i < number.length; i++)
{
if(offs == 0)
{
if(number[i] < '0' || number[i] > '9')
{
if(offs == length - 1)
remove(offs + i, 1);
else
return;
} else
{
length++;
}
continue;
}
if(!haveDot)
{
if((number[i] < '0' || number[i] > '9') && number[i] != '.')
{
if(offs == length - 1)
remove(offs + i, 1);
else
return;
continue;
}
if(number[i] == '.')
haveDot = true;
length++;
continue;
}
if(number[i] < '0' || number[i] > '9')
{
if(offs == length - 1)
{
remove(offs + i, 1);
} else
{
Toolkit.getDefaultToolkit().beep();
return;
}
} else
{
length++;
}
} super.insertString(offs, new String(number), a);
} private boolean haveDot;
private int length; IntOnlyDocument()
{
haveDot = true;
length = 0;
}
}
public JIntTextField(int cols)
{
super(cols);
isLimit = false;
} public JIntTextField(int cols, int max, int min)
{
super(cols);
isLimit = false;
if(max > min)
{
MAX = max;
MIN = min;
isLimit = true;
}
} public void setRange(int max, int min)
{
if(max > min)
{
MAX = max;
MIN = min;
isLimit = true;
}
}
/**
* 主函数\u2014\u2014测试
* @param args String[]
*/
public static void main(String args[])
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception exception) { }
JFrame frame = new JFrame();
frame.setTitle("JNumberField Demo");
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(new JIntTextField(10), "Center");
frame.setSize(400, 320);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2);
frame.setVisible(true);
} protected Document createDefaultModel()
{
return new IntOnlyDocument();
} private int MAX;
private int MIN;
private boolean isLimit;
}
直接运行,希望对你有帮助
<input type="text" value="" onkeyup="this.value=this.value.replace(/\D/g,'')" />
public void onKeyDown(Event event) {
System.out.println(event.character);
if(!(event.character>='0' &&event.character<='9') ){
event.keyCode=0;
event.doit=false;
}
}
String str = JOptionPane.showInputDialog("请输入要排序的数:");
Matcher m=Pattern.compile("(\\d{"+str.length()+"})").matcher(str);
if(m.matches()){
System.out.println("输入的是数字 "+m.group(1));
} else {
System.out.println("输入的含有字母" + str);
}