在JTextField 中控制输入数字? void jTextField6_keyPressed(KeyEvent e) { //在这儿屏蔽掉非数字键} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void jTextField6_keyPressed(KeyEvent e) { if (( e.getKeyChar () < e.VK_0 ) || ( e.getKeyChar ()>e.VK_9 )) { e.consume(); }}不过这样好象不太妥当,因为屏蔽了0-9之外的所有键,比如Tab等.最好通过PlainDocument类来实现 import java.awt.*;import javax.swing.*;import javax.swing.text.*;public class TextFieldTest extends JFrame { JTextField tf = new JTextField(); public TextFieldTest() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { TextFieldTest textFieldTest = new TextFieldTest(); textFieldTest.setSize(800,600); textFieldTest.setVisible(true); } private void jbInit() throws Exception { tf.setBounds(new Rectangle(108, 114, 104, 20)); this.getContentPane().setLayout(null); this.getContentPane().add(tf, null); tf.setDocument(new NumberDocument()); }} class NumberDocument extends PlainDocument { public void insertString(int offset,String str,AttributeSet a){ try{ int nTxt = Integer.parseInt(str); System.out.println(nTxt); super.insertString(offset,str,a); }catch(Exception e){ return; } } }试试这个,应该没问题了 这个已经测试过了。import java.awt.*;import javax.swing.*;/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: </p> * @author unascribed * @version 1.0 */public class Frame2 extends JFrame{ BorderLayout borderLayout1 = new BorderLayout(); NumberTextField jTextField1 = new NumberTextField(10,10);; public Frame2() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { Frame2 frame2 = new Frame2(); } private void jbInit() throws Exception { jTextField1.setText("jTextField1"); this.getContentPane().setLayout(borderLayout1); this.getContentPane().add(jTextField1, BorderLayout.NORTH); this.setSize(new Dimension(400, 300)); this.setEnabled(true); this.show(); this.validate(); }}import javax.swing.*;import javax.swing.text.*;import java.awt.Toolkit;import java.text.NumberFormat;import java.text.ParseException;import java.util.Locale;/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: </p> * @author unascribed * @version 1.0 */public class NumberTextField extends JTextField{ private Toolkit toolkit; private NumberFormat integerFormatter; public NumberTextField(int value, int columns) { super(columns); toolkit = Toolkit.getDefaultToolkit(); integerFormatter = NumberFormat.getNumberInstance(Locale.getDefault()); integerFormatter.setParseIntegerOnly(true); setValue(value); } public int getValue() { int retVal = 0; try { retVal = integerFormatter.parse(getText()).intValue(); } catch (ParseException e) { // This should never happen because insertString allows // only properly formatted data to get in the field. toolkit.beep(); } return retVal; } public void setValue(int value) { setText(integerFormatter.format(value)); } protected Document createDefaultModel() { return new WholeNumberDocument(); } protected class WholeNumberDocument 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.beep(); System.err.println("insertString: " + source[i]); } } super.insertString(offs, new String(result, 0, j), a); } }} 问一个小问题 二位数组如何分配动态空间??? 控制系统关闭退出 JAVA老鸟们,给小弟推荐几本学习java的书吧 请推荐一本数据结构Java描述的书 错在哪里呢? 在一个线程中的run()方法里面用无限循环的方式来检测某一个类中的变量的状态,当检测到该状态为true时,再判断该变量如果连续维持true状 各位仁兄,有没有用java快速访问excel的方法 使用泛型打印输出任意类型的数组,为什么调用时有错误? java动态规划算法求给定的值 高手請進 选课了!大家给意见。给分!!
if (( e.getKeyChar () < e.VK_0 ) || ( e.getKeyChar ()>e.VK_9 ))
{
e.consume();
}
}
不过这样好象不太妥当,因为屏蔽了0-9之外的所有键,比如Tab等.
最好通过PlainDocument类来实现
import javax.swing.*;
import javax.swing.text.*;
public class TextFieldTest extends JFrame {
JTextField tf = new JTextField(); public TextFieldTest() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
TextFieldTest textFieldTest = new TextFieldTest();
textFieldTest.setSize(800,600);
textFieldTest.setVisible(true);
}
private void jbInit() throws Exception {
tf.setBounds(new Rectangle(108, 114, 104, 20));
this.getContentPane().setLayout(null);
this.getContentPane().add(tf, null);
tf.setDocument(new NumberDocument());
}}
class NumberDocument extends PlainDocument {
public void insertString(int offset,String str,AttributeSet a){
try{
int nTxt = Integer.parseInt(str);
System.out.println(nTxt);
super.insertString(offset,str,a);
}catch(Exception e){
return;
}
}
}
试试这个,应该没问题了
import javax.swing.*;/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/public class Frame2 extends JFrame
{
BorderLayout borderLayout1 = new BorderLayout();
NumberTextField jTextField1 = new NumberTextField(10,10);; public Frame2()
{
try
{
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
Frame2 frame2 = new Frame2();
}
private void jbInit() throws Exception
{
jTextField1.setText("jTextField1");
this.getContentPane().setLayout(borderLayout1);
this.getContentPane().add(jTextField1, BorderLayout.NORTH); this.setSize(new Dimension(400, 300));
this.setEnabled(true);
this.show();
this.validate();
}
}import javax.swing.*;
import javax.swing.text.*;import java.awt.Toolkit;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/public class NumberTextField extends JTextField
{
private Toolkit toolkit;
private NumberFormat integerFormatter; public NumberTextField(int value, int columns)
{
super(columns);
toolkit = Toolkit.getDefaultToolkit();
integerFormatter = NumberFormat.getNumberInstance(Locale.getDefault());
integerFormatter.setParseIntegerOnly(true);
setValue(value);
} public int getValue()
{
int retVal = 0;
try
{
retVal = integerFormatter.parse(getText()).intValue();
}
catch (ParseException e)
{
// This should never happen because insertString allows
// only properly formatted data to get in the field.
toolkit.beep();
} return retVal;
} public void setValue(int value)
{
setText(integerFormatter.format(value));
} protected Document createDefaultModel()
{
return new WholeNumberDocument();
} protected class WholeNumberDocument 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.beep();
System.err.println("insertString: " + source[i]);
}
}
super.insertString(offs, new String(result, 0, j), a);
}
}
}