gpt4 book ai didi

java - 如何使用 DocumentFilter 自动将空字符串更改为 0?

转载 作者:行者123 更新时间:2023-12-01 18:08:50 24 4
gpt4 key购买 nike

我想确保我的 JTextField 中始终有一个正整数。例如,当创建 GUI 时,JTextField 目前有一个默认值“1”,我希望它能够在用户决定按退格键时,而不是成为一个空文本字段,我希望它自动将文本设置为“0”。这样做的原因是因为文本字段还有一个监听器,它调用一个方法来根据此数字更新 GUI 的另一部分。

我对 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()方法,并检查用户要删除的数字是否是最后一个。如果不是,则删除将正常工作,但如果是,则什么也不会发生。

我认为我遇到的问题是我想在删除方法中调用替换方法,但我没有 AttributeSet 可以使用。

最佳答案

// I'm trying to think if there's something I can put here

首先你的基本逻辑是错误的。你不能只检查偏移量。您的文本字段中可能有 5 个数字,而您只是尝试删除第一个数字。

你想做的是:

  1. 始终调用 super.remove(...) 从文档中删除数字
  2. 那么你需要获取Document来确定Document中还有多少位数字。如果该值为零,那么您可以调用 DocumentFilter 的 super.insertString(...) 方法来插入您想要插入到文档中的任何值。

I don't have AttributeSet to work with.

对于 JTextField,AttributeSet 将为 null。

关于java - 如何使用 DocumentFilter 自动将空字符串更改为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34402035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com