gpt4 book ai didi

java - 如何在运行时将文本设置为 JTextFields 的 null?

转载 作者:行者123 更新时间:2023-11-29 06:37:55 25 4
gpt4 key购买 nike

有人可以帮我如何在运行时将 Text 设置为 JTextFields 的 null,当长度等于 "13"时,我希望我的文本字段为空。它会要求用户输入文本(代码的大小最大为 13),然后输入将更改为 null 以供另一个进程使用。

code = new JextField(15); 
code.setForeground(new Color(30, 144, 255));
code.setFont(new Font("Tahoma", Font.PLAIN, 16));
code.setHorizontalAlignment(SwingConstants.CENTER);
code.setBounds(351, 76, 251, 38);
panel_2.add(code);

code.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
test();
}
public void removeUpdate(DocumentEvent e) {
test();
}
public void insertUpdate(DocumentEvent e) {
test();
}
public void test() {
if(code.getText().length()==13){
code.setText("");
}
}

我得到下一个错误:

java.lang.IllegalStateException: Attempt to mutate in notification
at javax.swing.text.AbstractDocument.writeLock(Unknown Source)
at javax.swing.text.AbstractDocument.replace(Unknown Source)
at javax.swing.text.JTextComponent.setText(Unknown Source)

最佳答案

DocumentListener 不能用于修改 JTextComponent 的底层 Document。请改用 DocumentFilter

添加:

AbstractDocument d = (AbstractDocument) code.getDocument();
d.setDocumentFilter(new MaxLengthFilter(13));

文档过滤器:

 static class MaxLengthFilter extends DocumentFilter {

private final int maxLength;

public MaxLengthFilter(int maxLength) {
this.maxLength = maxLength;
}

@Override
public void replace(DocumentFilter.FilterBypass fb, int offset,
int length, String text, AttributeSet attrs)
throws BadLocationException {

int documentLength = fb.getDocument().getLength();
if (documentLength >= maxLength) {
super.remove(fb, 0, documentLength);
} else {
super.replace(fb, offset, length, text, attrs);
}
}
}

关于java - 如何在运行时将文本设置为 JTextFields 的 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17666128/

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