如何在连续按键时停止按键重复?

How to stop key repeat on continuous keypress?

例如,如果我按下键“1”几秒钟,我的 JTextArea 中的结果将是“1111111111111”。

有没有办法在一个字符后停止它?

有一个容器,(HashSet、ArrayList,任何你喜欢的),并且有看起来类似于键 presses/releases

的伪代码的方法
add:
    if(!list.contains("key to enter")) addKey();

remove:
    if(list.contains("key to remove")) removeKey();

然后在您的方法结束时,使用列表中的数据更新文本区域。

如果我对问题的理解正确,您可以为此使用 DocumentFilter,并且仅当按键延迟超过 0.5 秒时才允许插入文本。

示例:

import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;

public class Example {

    public Example() {
        JTextArea textArea = new JTextArea();
        ((AbstractDocument) textArea.getDocument()).setDocumentFilter(new DocumentFilter() {
            String lastStr = "";
            long time = System.currentTimeMillis();

            @Override
            public void replace(FilterBypass fb, int offset, int length, String str, AttributeSet attr)
                    throws BadLocationException {
                long delay = System.currentTimeMillis() - time;
                time = System.currentTimeMillis();
                if (str.equals(lastStr) && delay <= 500) {
                    return;
                }
                lastStr = str;
                super.replace(fb, offset, length, str, attr);
            }
        });

        JFrame frame = new JFrame();
        frame.setContentPane(textArea);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800, 600);
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new Example();
    }
}