我正在使用DocumentFilter将输入限制为整数或十进制。我在这里发布的代码对此非常有效。
有人可以帮助我如何限制给定代码中的输入长度或范围吗?
谢谢!!
class MyIntFilter extends DocumentFilter {
public void insertString(FilterBypass fb, int offset, String string,
AttributeSet attr) throws BadLocationException {
Document doc = fb.getDocument();
StringBuilder sb = new StringBuilder();
sb.append(doc.getText(0, doc.getLength()));
sb.insert(offset, string);
if (test(sb.toString())) {
super.insertString(fb, offset, string, attr);
} else {
// warn the user and don't allow the insert
}
}
private boolean test(String text) {
try {
Integer.parseInt(text);
return true;
} catch (NumberFormatException e) {
return false;
}
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text,
AttributeSet attrs) throws BadLocationException {
Document doc = fb.getDocument();
StringBuilder sb = new StringBuilder(2);
sb.append(doc.getText(0, doc.getLength()));
sb.replace(offset, offset + length, text);
if (test(sb.toString())) {
super.replace(fb, offset, length, text, attrs);
} else {
// warn the user and don't allow the insert
}
}
@Override
public void remove(FilterBypass fb, int offset, int length)
throws BadLocationException {
Document doc = fb.getDocument();
StringBuilder sb = new StringBuilder(2);
sb.append(doc.getText(0, doc.getLength()));
//sb.append(doc.getText(0, 2));
sb.delete(offset, offset + length);
if (test(sb.toString())) {
super.remove(fb, offset, length);
} else {
// warn the user and don't allow the insert
}
}
}
您可能想测试一下(我还没有测试过),但是基本思路应该可以帮助您入门。
同时查看文档过滤器示例
至于设置的最小长度,你可能想使用InputVerifier
,以及
class MyIntFilter extends DocumentFilter {
private int maxLength = 0;
public void setMaxLength(int maxLength) {
this.maxLength = maxLength;
}
public int getMaxLength() {
return maxLength;
}
public void insertString(FilterBypass fb, int offset, String string,
AttributeSet attr) throws BadLocationException {
Document doc = fb.getDocument();
StringBuilder sb = new StringBuilder();
sb.append(doc.getText(0, doc.getLength()));
sb.insert(offset, string);
if (maxLength > 0 && doc.getLength() + string.length() <= maxLength) {
if (test(sb.toString())) {
super.insertString(fb, offset, string, attr);
} else {
// warn the user and don't allow the insert
}
}
}
private boolean test(String text) {
try {
Integer.parseInt(text);
return true;
} catch (NumberFormatException e) {
return false;
}
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text,
AttributeSet attrs) throws BadLocationException {
Document doc = fb.getDocument();
StringBuilder sb = new StringBuilder(2);
sb.append(doc.getText(0, doc.getLength()));
sb.replace(offset, offset + length, text);
if (test(sb.toString())) {
if (sb.length() > maxLength) {
length = sb.length() - maxLength;
if (length > 0) {
text = text.substring(0, length);
super.replace(fb, offset, length, text, attrs);
}
}
} else {
// warn the user and don't allow the insert
}
}
@Override
public void remove(FilterBypass fb, int offset, int length)
throws BadLocationException {
Document doc = fb.getDocument();
StringBuilder sb = new StringBuilder(2);
sb.append(doc.getText(0, doc.getLength()));
//sb.append(doc.getText(0, 2));
sb.delete(offset, offset + length);
if (test(sb.toString())) {
super.remove(fb, offset, length);
} else {
// warn the user and don't allow the insert
}
}
}
问题内容: 我有这个功能(将代码示例的HTML标记剥离)从CSV构建HTML表,但是每次尝试运行它时都会遇到运行时错误,但我不知道为什么。谷歌说,也许编码有些错误,但是我不知道如何更改。 我的CSV以ANSI编码,并包含ä,Ä,Ü,Ö等字符,但我无法控制编码,或者将来是否会更改。 错误发生在这里: 121行是 源代码: 问题答案: 您可以尝试通过使用方法(javadocs)的形式来利用正确的编码。
我的最终目标是打乱矩阵的行(我使用代数)。 为了解决这个问题,我需要设置数组的可变范围(片)。假设我有一个数组(假设它是一个3x3矩阵): 我提取了一行,如下所示: 现在,对于knuth shuffle,我需要用另一行交换这个。我需要做的是: 但是,这样做失败了: 例子:http://is.gd/ULkN6j
我目前正在用下面的代码从Google表单中获取所有值,但是在从那里获取所有值之后,现在如何在另一个表单中设置它们呢? var ss=电子表格应用程序。openById(ID); var值=ss。getDataRange()。getValues(); var ss1=电子表格应用程序。openById(ID1); 我没能做到,有没有办法用for循环做到?
问题内容: 我正在实验室中运行Linux(Debian和Ubuntu)。用户名和组名由NIS和yp处理。我们有一些普通用户,每个人都可以访问该用户来运行实验,然后我们每个人都有自己的用户,此外还有一个共同的组,我们都是该组的成员。 如何使用户/组读取/写入(/可执行)共享驱动器(NFS)上的所有文件和目录?基本上我想要的是 或等效地。 但是运行以上命令只能修复文件夹中的当前文件,而umask仅适用
我的理解是, 函数实际上是 Python 3 中的一种对象类型,它动态生成其内容,类似于生成器。 在这种情况下,我预计下一行将花费大量时间,因为为了确定1万亿()是否在范围内,必须生成1万亿值: 此外:似乎无论我添加多少个零,计算或多或少都需要相同的时间(基本上是瞬时的)。 我也尝试过类似的方法,但计算仍然几乎是即时的: 如果我尝试实现我自己的范围函数,结果就不太好了! 对象在引擎盖下做什么使它如
我希望每个框中都有新的日期范围,但它只返回最后一个文本框的日期范围。我也使文本框id的动态,但我仍然面临着这个问题。我有每个文本框的开始日期和结束日期,我用PHP计算了开始日期和结束日期的日期范围,并禁用了用户在开始日期和日期中选择的所有日期,所有这些日期都正常工作,但它返回了datepicker中禁用的最后一个文本框日期。 这是截图- 示例图像 用于datepicker的Javascript函数