Java 如何使用DocumentFilter将空字符串自动更改为0?
我想确保我的JTextField中始终有一个正整数。例如,在创建GUI时,JTextField当前有一个默认值“1”,我希望它能够在用户决定点击backspace时自动将文本设置为“0”,而不是变为空文本字段。这是因为文本字段还有一个侦听器,它调用一个方法来根据这个数字更新GUI的另一部分 我对DocumentFilter还很陌生,所以我甚至不确定自己的方向是否正确,但以下是我目前掌握的情况:Java 如何使用DocumentFilter将空字符串自动更改为0?,java,swing,documentfilter,Java,Swing,Documentfilter,我想确保我的JTextField中始终有一个正整数。例如,在创建GUI时,JTextField当前有一个默认值“1”,我希望它能够在用户决定点击backspace时自动将文本设置为“0”,而不是变为空文本字段。这是因为文本字段还有一个侦听器,它调用一个方法来根据这个数字更新GUI的另一部分 我对DocumentFilter还很陌生,所以我甚至不确定自己的方向是否正确,但以下是我目前掌握的情况: public class IntegerFilter extends DocumentFilter {
public class IntegerFilter extends DocumentFilter {
public void remove(FilterBypass fb, int offs,
int len) throws BadLocationException {
if (offs == 0) {
// I'm trying to think if there's something I can put here
} else {
super.remove(fb, offs, len);
}
}
public void replace(FilterBypass fb, int offs, int len, String str,
AttributeSet a) throws BadLocationException {
String text = fb.getDocument().getText(0, fb.getDocument().getLength());
text += str;
if (text.matches("\\d+")) {
super.replace(fb, offs, len, str, a);
}
}
}
现在,我正在覆盖过滤器的remove()方法,并检查用户删除的数字是否是最后一个。如果不是这样,那么delete将正常工作,但如果是这样,那么什么也不会发生
我想我遇到的问题是,我想在remove方法中调用replace方法,但我没有AttributeSet来处理
//我在想是否有什么东西可以放在这里
首先,你的基本逻辑是错误的。你不能只检查偏移量。您可以在文本字段中有5个数字,并且仅尝试删除第一个数字
您要做的是:
super.remove(…)
从文档中删除数字AttributeSet
将为空
//我在想是否有什么东西可以放在这里
首先,你的基本逻辑是错误的。你不能只检查偏移量。您可以在文本字段中有5个数字,并且仅尝试删除第一个数字
您要做的是:
super.remove(…)
从文档中删除数字对于JTextField,
AttributeSet
将为空。“我想确保我的JTextField中始终有一个正整数……”new JSpinner(new SpinnerNumberModel(5,11000000,1))
Hmm这很有趣,我以前没有看过JSpinner。因此,如果我想实现和增加和减少JSpinner号按钮,那么它应该已经内置了“…内置了吗?”测试这一点只需要两行代码。JSpinner
后面没有文档吗?我无法将它强制转换为AbstractDocument
并调用getDocument()
,就像我使用JTextField
一样,“JSpinner后面没有文档吗?”它有一个(微调器编号)模型。“我想确保我的jtexfield中始终有一个正整数…”新的JSpinner(新的微调器编号)模型(5,11000000,1))
Hmm这很有趣,我以前没有看过JSpinner。因此,如果我想实现和增加和减少按钮,JSpinner的数字应该已经内置了?“…内置了吗?”测试这一点不需要超过两行代码。JSpinner
后面没有文档吗?我无法将它转换为AbstractDocument
并调用getDocument()
,就像我使用JTextField
时一样,“JSpinner后面没有文档吗?”它有一个(微调器编号)模型。哦,我没有想到补偿的情况!这很好,谢谢。哦,我没有想到补偿的情况!这很好,谢谢。