只能输入文件名和只能输入数字的文本框
2008-06-17 16:06
323 查看
package com.browser; import java.awt.Toolkit; import java.io.File; import java.util.StringTokenizer; import javax.swing.JTextField; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.PlainDocument; /** * 只能输入文件名的文本框 * @author dl */ public class JFileNameTextField extends javax.swing.JTextField{ public static void main(String[] args) { // TODO Auto-generated method stub //测试代码 /*JFrame frame = new JFrame("文本框的内容限制测试"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new JFileNameTextField(true), BorderLayout.CENTER); frame.add(new JNumTextField(1, 999), BorderLayout.NORTH); frame.setSize(300, 150); frame.setVisible(true);*/ } /** *<br>方法说明:初始化 *<br>输入参数:isPath 是否可以输入带目录的文件名 *<br>返回类型: */ public JFileNameTextField(boolean isPath) { super(); FileNameDocument fd = (FileNameDocument)this.getDocument(); fd.setIsPath(isPath); } protected Document createDefaultModel() { return new FileNameDocument(this); } } /** * 判断输入字符是否符合文件名规范的过滤实现 * @author dl */ class FileNameDocument extends PlainDocument { private boolean isPath = false; /**是否可以输入带目录的文件名*/ private JTextField parent = null; /**PlainDocument所在的文本框*/ private static Toolkit toolkit = Toolkit.getDefaultToolkit(); public FileNameDocument(JTextField field) { super(); this.parent = field; } public void setIsPath(boolean isPath) { this.isPath = isPath; } public void insertString(int offset, String text, AttributeSet attributes) throws BadLocationException { //得到当前文本框的内容 String strValue = parent.getText(); strValue = strValue.substring(0, offset) + text + strValue.substring(offset, strValue.length()); //判断得到的文本是否符合文件名的语法规范 if (isPath) { if (!isNormallyPathString(strValue)) { toolkit.beep(); return; } } else { if (!isNormallyNameString(strValue)) { toolkit.beep(); return; } } super.insertString(offset, text, attributes); } /** *<br>方法说明:判断文件路径是否合法 *<br>输入参数:strName 文件路径 *<br>返回类型:符合语法规则的文件路径 */ public static boolean isNormallyPathString(String strName) { int pos = strName.indexOf(":"); if (strName.indexOf("////") != -1) return false; if (pos == -1) { StringTokenizer st = new StringTokenizer(strName, "//"); while (st.hasMoreTokens()) { String strTemp = st.nextToken(); if (!isNormallyNameString(strTemp)) { return false; } } } else { String strPath = strName.substring(0, pos); if (strPath.length() == 1) { java.lang.Character fq = strPath.toLowerCase().charAt(0); java.lang.Character fq1 = strName.toLowerCase().charAt(pos); if (fq1 != ':') return false; if (strName.length() > pos + 1) { java.lang.Character fq2 = strName.toLowerCase().charAt( pos + 1); if (fq2 != '//') return false; } if (fq >= 'c' && fq <= 'z') { if (!new File(fq + ":").exists()) return false; } } else { return false; } StringTokenizer st = new StringTokenizer(strName.substring(pos + 1, strName.length()), "//"); while (st.hasMoreTokens()) { String strTemp = st.nextToken(); if (!isNormallyNameString(strTemp)) { return false; } } } return true; } /** *<br>方法说明:判断文件名是否合法 *<br>输入参数:strName 文件名 *<br>返回类型:符合语法规则的文件名 */ public static boolean isNormallyNameString(String strName) { int pos = strName.indexOf("://"); if (pos == -1) { } String strText = "/t/r/n///:*?/"<>|^___FCKpd___0quot;; for (int i = 0; i < strName.length(); ++i) { String ch = String.valueOf(strName.charAt(i)); if (strText.indexOf(ch) != -1) { return false; } } return true; } }
package com.browser; import java.awt.Toolkit; import javax.swing.JTextField; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.PlainDocument; /** * 只能输入数字的文本框 * @author dl */ public class JNumTextField extends javax.swing.JTextField { /** *<br>方法说明:初始化 *<br>输入参数:min 允许输入的数值的最小值; max 允许输入的数值的最大值 *<br>返回类型: */ public JNumTextField(int min, int max) { super(); NumericDocument nd = (NumericDocument) this.getDocument(); nd.setMax(max); nd.setMin(min); nd.setTextField(this); } protected Document createDefaultModel() { return new NumericDocument(0, 100); } } /** * 判断输入内容是否属于允许范围内的数值的过滤实现 * @author dl */ class NumericDocument extends PlainDocument { protected int maxDigits = -1; /**允许输入的数值的最大值*/ protected int minDigits = -1; /**允许输入的数值的最小值*/ protected JTextField parent = null; /**PlainDocument所在的文本框*/ protected static Toolkit toolkit = Toolkit.getDefaultToolkit(); public NumericDocument(int min, int max) { super(); maxDigits = max; minDigits = min; } public void setMax(int max) { maxDigits = max; } public void setMin(int min) { minDigits = min; } public void setTextField(JTextField parent) { this.parent = parent; } public void insertString(int offset, String text, AttributeSet attributes) throws BadLocationException { //得到当前文本框的内容 String strValue = parent.getText(); strValue = strValue.substring(0, offset) + text + strValue.substring(offset, strValue.length()); //判断输入内容是否属于允许范围内的数值 int value = -1; try { value = Integer.parseInt(strValue); } catch (NumberFormatException ex) { toolkit.beep(); return; } if (value > maxDigits || value < minDigits) { toolkit.beep(); return; } super.insertString(offset, text, attributes); } }
相关文章推荐
- 控制模版列的文本框只能输入数字并且禁止粘贴
- [小技巧]文本框中限制只能输入数字,也不允许Ctrl+V
- VB.NET使文本框只能输入数字
- JS 控制文本框只能输入中文、英文、数字与指定特殊符号
- jquery限定文本框只能输入数字(整数和小数)
- js正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
- jQuery 限制文本框只能输入数字
- 用javascript实现文本框中只能输入数字
- ios 文本框只能输入数字保留两位小数和只能输入数字
- Jquery控制文本框只能输入数字或字母
- 文本框只能输入数字
- js 文本框只能输入数字和点
- 如何实现文本框中只能输入数字和字母(也就是只能输入IP格式的字符)
- jquery 限制文本框只能输入数字
- JS 控制文本框只能输入中文、英文、数字与指定特殊符号
- 正则表达式限制文本框只能输入中文或者英文或者数字
- 限制文本框输入只能为字母`数字`.`/号的实现
- 让文本框只能输入数字
- .net(c#) winform文本框只能输入数字,不能其他非法字符(转)
- js正则表达式限制文本框只能输入数字,小数点,英文字母