如何在连续按键时停止按键重复?
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();
}
}
例如,如果我按下键“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();
}
}