請教如何將textField設置為只能輸入數字. 用JAVASCRIPT,简单但是不太好看的办法是,在你的TEXTFIELD失去焦点时,判断它的VALUE是不是包含数字,是的话就仍让焦点返回到TEXTFIELD上.好看点的就是用KEYDOWN事件控制了:)比较烦:) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我写过一个JavaBean,继承javax.swing.JTextField,完成这样的功能,但是实现机理比较复杂。首先,Swing文本控件是使用document来控制编辑操作的。你需要继承一个javax.swing.text.PlainDocument类的子类,override他的insertString方法,在其中进行判断,只有当传入参数是数字时,才调用父类的insertString方法,否则什么也不做。然后,在你自己继承javax.swing.JTextField类的子类里,setDocument(new yourDocument()); 其实用这个就可以了javascript 的函数isNaN()判断textField的值if (isNaN(k1.value)==true) { window.alert("對不起﹗你輸入的不是數字﹗") k1.value=0 } else ......end if 有好方法但太复杂了。原理就是lgpen(永远是新手!)讲的! TO : 能不能在每一个KeyEvent事件中得到输入的键值(Char),然后通过与数字的Char值进行判断呢,如果不是,那么就象JavaScript那样来处理。这样也能行的通吧,不过也显得比较笨了点! :) 用document,很容易实现的,手头没有资料,没办法给你写一个,你可以查一下。 chinajavaworld的sunking写的import javax.swing.*;import javax.swing.text.*;import java.awt.*;/** * 只允许输入数字的JTextField * JNumberField txtNumber1=new JNumberField() * txtNumber2=new JNumberField(4) * txtNumber3=new JNumberField(4,12) */public class JNumberField extends JTextField{ public JNumberField() { super(); setDocument(new numDoc()); } public JNumberField(int decLen) { super(); setDocument(new numDoc(decLen)); } public JNumberField(int decLen,int maxLen) { super(); setDocument(new numDoc(decLen,maxLen)); }}class numDoc extends PlainDocument{ int maxLength=16; int decLength=0; public numDoc(int decLen,int maxLen) { maxLength=maxLen; decLength=decLen; } public numDoc(int decLen) { decLength=decLen; } public numDoc(){} 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{ Float.parseFloat(str+s); }catch(Exception e){ Toolkit.getDefaultToolkit().beep(); return; } super.insertString(offset,s,a); }} function number(){ if (event.keyCode<48 || event.keyCode>57 || event.keyCode==118) event.returnValue=false; if (event.keyCode==46) event.returnValue=true; }<input type="text" name="test" value="" onclick="number()"> 有必要搞得那么复杂吗?给你一个,改自一篇sun公司开发文档……import javax.swing.text.*;import java.awt.*;/** * 描述:调用格式为jTextField.setDocument(new NumberDocument())即可 * */public class NumberDocument extends PlainDocument { public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { 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(); //System.out.println("你输入了非数字字符!!") } } 不好意思,后面少复制了一点代码,接上 super.insertString(offs, new String(result, 0, j), a); }} 自己写一个TxtValidate类(继承KeyListener接口),然后用AddKeyListener()把它加到要控制的TextField里去,我在好多Java书上看到的都是这种做法。我也写了一个,很简单,可惜今天没有带代码。 都不看demo的!jdk 自带的demo里有很好的integerdocument! import java.awt.event.KeyListener;import java.awt.event.KeyEvent;import java.awt.Component;import javax.swing.text.JTextComponent;public class FloatNumberKeyListener implements KeyListener{ public FloatNumberKeyListener(){ } public void keyPressed(KeyEvent e){ } public void keyReleased(KeyEvent e){ } public void keyTyped(KeyEvent e){ Component c = (Component)e.getSource(); if (c instanceof JTextComponent){ JTextComponent tc = (JTextComponent)c; String strText = null; try{ strText = tc.getText(); } catch (NullPointerException ne){ strText = null; } if (strText==null){ char code = e.getKeyChar(); if (code!='0'&&isNumber(code)){ return; } else e.consume(); } else{ char code = e.getKeyChar(); if (code=='.'&&(strText.indexOf(".")==-1)) return; else if (isNumber(code)) return; else if (e.isActionKey()) return; else e.consume(); } } } protected boolean isNumber(char code){ if ((code=='0')||(code=='1')||(code=='2')||(code=='3')||(code=='4')||(code=='5')|| (code=='6')||(code=='7')||(code=='8')||(code=='9')) return true; return false; } }为你的textfield添加以上KeyListener import javax.swing.text.PlainDocument;import javax.swing.text.AttributeSet;import java.awt.Toolkit;import javax.swing.text.BadLocationException;public class NumberDocument extends PlainDocument { public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { 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(); //System.out.println("你输入了非数字字符!!") } } super.insertString(offs, new String(result, 0, j), a); } }在控件中调用格式为jTextField.setDocument(new NumberDocument())即可 java matlab混合编程遇到的虚拟机未启动的问题 jquery json from 的问题 J2SE服务器值传递 江湖救急-为了一棵树-找叶子 jar打包问题 UTF-7编码 java.lang.OutOfMemoryError的出错问题_高分有送! 随机数问题 紧急求救:对Oracle数据库中long 型数据进行模糊查询 如何查? 求助,Java有什么类似jfeechart的图表框架 為仕麼將textArea設置為不可編輯以後, 其background就變成灰色的了 如何在客户端判断下拉列表框!!!!!!!!!!!!!
setDocument(new yourDocument());
if (isNaN(k1.value)==true)
{
window.alert("對不起﹗你輸入的不是數字﹗")
k1.value=0
}
else
......end if
原理就是lgpen(永远是新手!)讲的!
能不能在每一个KeyEvent事件中得到输入的键值(Char),然后通过与数字的Char值进行判断呢,如果不是,那么就象JavaScript那样来处理。这样也能行的通吧,不过也显得比较笨了点! :)
import javax.swing.text.*;
import java.awt.*;/**
* 只允许输入数字的JTextField
* JNumberField txtNumber1=new JNumberField()
* txtNumber2=new JNumberField(4)
* txtNumber3=new JNumberField(4,12)
*/
public class JNumberField extends JTextField
{
public JNumberField()
{
super();
setDocument(new numDoc());
}
public JNumberField(int decLen)
{
super();
setDocument(new numDoc(decLen));
}
public JNumberField(int decLen,int maxLen)
{
super();
setDocument(new numDoc(decLen,maxLen));
}
}
class numDoc extends PlainDocument
{
int maxLength=16;
int decLength=0;
public numDoc(int decLen,int maxLen)
{
maxLength=maxLen;
decLength=decLen;
}
public numDoc(int decLen)
{
decLength=decLen;
}
public numDoc(){}
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{
Float.parseFloat(str+s);
}catch(Exception e){
Toolkit.getDefaultToolkit().beep();
return;
}
super.insertString(offset,s,a);
}
}
if (event.keyCode<48 || event.keyCode>57 || event.keyCode==118)
event.returnValue=false;
if (event.keyCode==46)
event.returnValue=true;
}<input type="text" name="test" value="" onclick="number()">
给你一个,改自一篇sun公司开发文档……import javax.swing.text.*;
import java.awt.*;
/**
* 描述:调用格式为jTextField.setDocument(new NumberDocument())即可
* */
public class NumberDocument extends PlainDocument {
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
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();
//System.out.println("你输入了非数字字符!!")
}
}
super.insertString(offs, new String(result, 0, j), a);
}
}
import java.awt.event.KeyEvent;
import java.awt.Component;
import javax.swing.text.JTextComponent;public class FloatNumberKeyListener implements KeyListener{
public FloatNumberKeyListener(){
}
public void keyPressed(KeyEvent e){
}
public void keyReleased(KeyEvent e){
}
public void keyTyped(KeyEvent e){
Component c = (Component)e.getSource();
if (c instanceof JTextComponent){
JTextComponent tc = (JTextComponent)c;
String strText = null;
try{
strText = tc.getText();
}
catch (NullPointerException ne){
strText = null;
}
if (strText==null){
char code = e.getKeyChar();
if (code!='0'&&isNumber(code)){
return;
}
else
e.consume();
}
else{
char code = e.getKeyChar();
if (code=='.'&&(strText.indexOf(".")==-1))
return;
else if (isNumber(code))
return;
else if (e.isActionKey())
return;
else
e.consume();
}
}
}
protected boolean isNumber(char code){
if ((code=='0')||(code=='1')||(code=='2')||(code=='3')||(code=='4')||(code=='5')||
(code=='6')||(code=='7')||(code=='8')||(code=='9'))
return true;
return false;
}
}
为你的textfield添加以上KeyListener
import javax.swing.text.AttributeSet;
import java.awt.Toolkit;
import javax.swing.text.BadLocationException;public class NumberDocument extends PlainDocument {
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
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(); //System.out.println("你输入了非数字字符!!")
}
}
super.insertString(offs, new String(result, 0, j), a);
}
}在控件中
调用格式为jTextField.setDocument(new NumberDocument())即可