`
laozhao
  • 浏览: 1272 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
最近访客 更多访客>>
社区版块
存档分类
最新评论

NumberFile 数字输入框

阅读更多
最近写了一个小程序,需要用到数字输入框,感觉这个东西大家都在用,但是竟然没有找到一个控件,比较郁闷,所以就自己写了一个,大家可以分享一下。欢迎使用,欢迎提意见。
package com.laozhao.msas.util;

import java.awt.Toolkit;
import java.util.regex.Pattern;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

/**
 * 
 * 数字输入框 number(precision,scale) precision:1~38 scale:0~127
 * 
 * @author LaoZhao
 * 
 */
public class NumberFile extends JTextField {

	/**
	 * 
	 */
	private static final long serialVersionUID = 7766646453110003951L;
	private int precision = 8;
	private int scale = 0;
	private final Pattern intp = Pattern.compile("\\d+");
	private Pattern dicp = Pattern.compile("\\d{1," + (precision - scale)
			+ "}[.]{1}\\d{0," + scale + "}");

	public int getPrecision() {
		return precision;
	}

	public int getScale() {
		return scale;
	}

	public NumberFile() {
		super();
		setDocument(new NumberDocument());
	}

	public NumberFile(int precision, int scale) {
		super();
		setScale(precision, scale);
		setDocument(new NumberDocument());
	}

	public void setScale(int precision, int scale) {
		this.precision = precision;
		this.scale = scale;
		if (precision < 1 || precision > 38) {
			throw new java.lang.IllegalArgumentException(
					"precision must letter than 38 and bigger than 1");
		} else if (scale < -1 || scale > 127) {
			throw new java.lang.IllegalArgumentException(
					"scale must letter than 127 and bigger than -1");
		} else if (precision <= scale) {
			throw new java.lang.IllegalArgumentException(
					"precision must bigger than scale");
		} else {
			dicp = Pattern.compile("\\d{1," + (precision - scale)
					+ "}[.]{1}\\d{0," + scale + "}");
		}
	}

	public Integer getIntValue() {
		return getDoubleValue().intValue();
	}

	public Double getDoubleValue() {
		return Double.parseDouble(getText());
	}

	class NumberDocument extends PlainDocument {
		/**
		 * 
		 */
		private static final long serialVersionUID = 618631385104970883L;

		public NumberDocument() {
			super();
		}

		public void insertString(int offs, String str, AttributeSet a)
				throws BadLocationException {
			try {
				System.out.println(str);
				if (offs < precision - scale) {
					if (!intp.matcher(getText(0, getLength()) + str).matches()) {
						return;
					}
				} else {
					if (!dicp.matcher(getText(0, getLength()) + str).matches()) {
						return;
					}
				}
				super.insertString(offs, str, a);
			} catch (Exception e) {
				Toolkit.getDefaultToolkit().beep();
			}
		}
	}

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		NumberFile nun = new NumberFile(8, 3);
		frame.add(nun);
		nun.setScale(5, 2);
		frame.setVisible(true);
		frame.pack();
	}

}

分享到:
评论

相关推荐

    HarmonyOS应用开发--排序练习.docx

    这里使用了`&lt;input&gt;`标签创建了一个数字输入框,并绑定了`on:change`事件,当用户更改输入框中的值时会触发`changeNum`方法。 ##### 2. Submit Button ```html 提交" onclick="submit"&gt; ``` 提交按钮用于收集用户...

    html实现加减

    此外,对于更复杂的计算,可能还需要考虑错误处理,如检查输入是否有效(非空、数字等),以及提供更丰富的用户交互,如清空输入框、显示错误提示等。 标签“源码”表明这篇文章可能提供了完整的HTML和JavaScript...

    input值总结

    4. `number`:用于输入数字,可以设置最小值(min)和最大值(max)。 5. `date`:输入日期,遵循ISO 8601标准(YYYY-MM-DD)。 6. `checkbox`:创建复选框,用户可以多选。 7. `radio`:创建单选按钮,同一组内只能选择...

    html的表单注册信息的一部分啊.txt

    - **`type="number"`**:表示这是一个数字输入框。 - **`max="100"`**:设置最大值。 - **`min="1"`**:设置最小值。 #### 3.7 复选框 ```html &lt;tr&gt;&lt;td&gt;: &lt;td&gt;&lt;input type="checkbox" name="hobby" value="11"/&gt; ...

    DIV+CSS结构的主页制作.pptx

    13. `number`:创建数字输入框,限制输入为整数或浮点数。 14. `range`:创建滑块控件,用于在一定范围内选取数值。 15. `date`, `month`, `week`, `time`, `datetime`, `datetime-local`:创建日期和时间选择器,...

    File文件登记簿软件

     (1)督办通知单的第一行是二号字小标宋标题“XX县人民政府督办通知单”,点击“添加”按钮,新添一个单元格,在单元格内容输入框内填入“XX县人民政府督办通知单”。  (2)此标题不是表格内容,则按照无...

    javaWeb学习笔记

    - `number`: 数字输入框。 - `range`: 滑块输入框。 - `date`: 日期选择器。 - `month`: 月份选择器。 - `week`: 周选择器。 - `time`: 时间选择器。 - `datetime-local`: 本地日期时间选择器。 - `search`:...

    标签.docx

    - `number`: 数字输入框 - `search`: 搜索输入框 - `tel`: 电话号码输入框 - `url`: URL 输入框 **常见属性**: - `name`: 表单元素的名字,用于标识该元素。 - `value`: 表单元素的值,用于存储用户输入的数据。 -...

    web前端开发知识点总结.docx

    - `number`:数字输入框。 - `date picker`:日期选择器。 - `datalist`:提供自动提示列表。 3. **其他新标签**: - `ruby`:用于标注音译或注解,如汉字拼音。 - `iframe`:在页面中嵌入其他网页或框架。 *...

    HTML5&CSS3网页制作:Input元素的其他属性.pptx

    multiple属性适用于type="email"和type="file"的Input元素,使得用户可以在同一输入框中选择多个电子邮件地址或文件。例如,`&lt;input type="file" name="img" multiple&gt;`允许用户一次选择多张图片进行上传。 5. min...

    robotium测试之创建android实例(calculator)

    在这个例子中,布局包含两个输入框(EditText)用于输入数字,以及按钮(Button)执行乘法运算。以下是基本的 XML 代码结构: ```xml &lt;TextView&gt; &lt;!-- 显示提示信息 --&gt; &lt;TextView&gt; &lt;!-- 分隔符 --&gt; ...

    html5+css 代码.docx

    - `&lt;input type="number"&gt;`是数字输入框。 - `&lt;input type="range"&gt;`是滑块控件。 - `&lt;input type="color"&gt;`是颜色选择器。 9. **盒模型**:`margin`用于设置外边距,例如`margin:20px;`。它有多种写法,如`...

    表单与列表

    - **只能输入数字的文本框(Number+[0-9]*pattern)** - 标签:&lt;label for="number-pattern"&gt;Number+[0-9]*pattern: &lt;input name="number" pattern="[0-9]*" id="number-pattern" value="" type="number"&gt; - 作用:...

    Web开发1

    表单有两个重要的属性:`action`和`method`。`action`属性指定了处理...变量命名遵循一些规则,如首字符必须是字母或下划线,后续字符可以是字母、下划线或数字。了解并熟练掌握这些基础概念对于进行Web开发至关重要。

    HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法

    对于输入类型,HTML5新增了`tel`(电话号码验证)、`url`(网址验证)、`email`(电子邮件验证)、`date`(日期验证)、`time`(时间验证)、`number`(数字验证)、`range`(数字范围控制)和`color`(颜色选择器)...

    php梦网科技短信平台手机短信验证功能实现

    创建一个表单,包括手机号输入框和验证码输入框,以及提交按钮。 - 提交表单时,发送POST请求到后端验证接口,将输入的验证码与服务器存储的验证码进行比对。 5. **验证逻辑**: - 在后端,接收到验证码后,与...

    HTML考试题.doc

    7. JavaScript数据类型:在JavaScript中,数字和字符串相加会产生字符串连接,因此`x+y`的结果是"11number",选a)。 8. HTML数学表达式:HTML中可以使用`&lt;sup&gt;`标签表示上标,`&lt;sub&gt;`表示下标。因此,正确表示2²=4...

Global site tag (gtag.js) - Google Analytics