问题:
之前我有一篇博文也写了这个问题,也是使用的字符串来控制文本框的输入数字
不过,那篇博文给的方法只能限制数字输入,以及数字输入长度的限制
今天给出可以限制输入数字大小的方法,例如:希望输入的数字最大不能超过35,那么36是绝对输入不进去的
而且,其他字符也是不能输入进去的
有兴趣的可以自己改成浮点数的输入大小限制(转载请说明来源:/Kilper)
代码:
package Test.csdn;
import java.awt.GridLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
*
* @ClassName NumLimit
* @Description 通过字符串来控制JTextField输入数字以及数字大小的示例
* 只能控制正整数的输入(没有包括0,因为设置了第一位不能输入0,如有需要可以自己更改)
* 如果有什么疑问请到作者博客留言或评论,博客地址在下面一行
* 有兴趣的可以改成浮点数的输入大小限制,Kilper就不再写浮点数的示例了
* @author Kilper /Kilper
* @date -8-24 下午05:08:40
*
*/
public class NumLimit extends JFrame {
/**
* @Fields serialVersionUID : TODO
*/
private static final long serialVersionUID = 1133553442569412104L;
private static JTextField limit;
private static JTextField input;
public NumLimit(String title) {
super(title);
this.setSize(400, 100);
this.add(buildTestPanel()); // 加载面板到窗体中
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭按钮的事件响应
this.setLocationRelativeTo(null); // 窗体位置居中
}
/**
*
* @Title buildTestPanel
* @author Kilper /Kilper
* @Description: 获得构建好的JPanel面板
* @return JPanel
*/
private JPanel buildTestPanel() {
JPanel panel = new JPanel();
limit = new JTextField();
input = new JTextField();
panel.setLayout(new GridLayout(0, 2));
panel.add(new JLabel("数字输入限制设置限制框:"));
panel.add(limit);
panel.add(new JLabel("数字输入限制验证输入框:"));
panel.add(input);
// 为设置限制框也添加数字输入和大小限制
limit.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
String key = limit.getText();
String value = getLimit(key, 99999); // 该框只能输入最大99999的数字
if (value.indexOf(e.getKeyChar()) < 0)
e.consume();
}
});
input.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
String key = input.getText();
int count = Integer.valueOf(limit.getText().trim());
// 示例讲解:key = "13" count = 135
String value = getLimit(key, count);
// 示例讲解:返回的字符串使得value = "012345";
if (value.indexOf(e.getKeyChar()) < 0) // 如果输入6,则销毁该输入
// 输入字符,则销毁该输入
e.consume(); // 销毁输入
// 如果输入0-5之间,则不做处理,输入的数字会显示在屏幕中
}
});
return panel;
}
/**
*
* @Title getLimit
* @author Kilper /Kilper
* @Description: 获得限制字符串
* @return String
*/
private String getLimit(String key, int num) {
// 示例讲解:key = "13" count = 135
String value = String.valueOf(num); // value = "135";
int a[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, b = num;
// b = 135,a[] = {0,……};
int len = key.length(), length = value.length();
// len = 2,length = 3;
for (int i = 0; b > 0; i++, b /= 10)
a[length - 1 - i] = b % 10;
// a[] = {1,3,5,0,……};
int in;
if (key.equals(""))
in = 0;
else
in = Integer.valueOf(key) * 10;
// in = 130;
if (len < length - 1) {
if (len == 0)
value = string(1, 9); // 限制第一位不能输入0
else
value = string(0, 9);
} else if (len == length - 1) {
// 进入这里 in = 130 < num = 135
if (in <= num)
if (in == 0)
value = string(1, a[len]);
else
value = string(0, a[len]); // 所以:value = "012345";
else
value = "";
} else {
value = "";
}
// 返回的字符串为:"0123456"
return value;
}
/**
*
* @Title string
* @author Kilper /Kilper
* @Description: 获得从a开始,到b结束的字符串,例如:a=2,b=6,则返回:"23456"
* @return String
*/
private static String string(int a, int b) {
String value = "";
for (int i = a; i <= b; i++)
value += String.valueOf(i);
return value;
}
public static void main(String[] args) {
NumLimit test = new NumLimit("数字输入和大小测试"); // 新建NumLimit实例
test.setVisible(true);
}
}