gpt4 book ai didi

java - 是否可以通过key listener检查SWT文本中粘贴的文本是否有特殊字符?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:54 25 4
gpt4 key购买 nike

我有一个 SWT 文本,它应该只接受落在这个范围内的字符:[a-z] [A-Z] [0-9]。为此,我在文本上添加了一个 KeyListener,下面是代码。

Pattern pattern = Pattern.compile("[a-zA-Z0-9]+");

@Override
public void keyPressed(KeyEvent event)
{
String enteredCharacterInStr = String.valueOf(event.character);
boolean isAlphaNumeric = pattern.matcher(enteredCharacterInStr).find();

if(event.keyCode == SWT.ARROW_LEFT ||
event.keyCode == SWT.ARROW_RIGHT ||
event.keyCode == SWT.BS ||
event.keyCode == SWT.DEL )
{
event.doit = true;
}
else if(isAlphaNumeric)
{
event.doit = true;
}
else if(event.stateMask == SWT.CTRL && (event.keyCode == 'a' ||
event.keyCode == 'c' ||
event.keyCode == 'v' ||
event.keyCode == 'x' ) )
{
event.doit = true;
}
else
{
event.doit = false;
}

}

上面的代码在用户不输入特殊字符时会起作用,但当用户复制包含特殊字符的文本并粘贴到文本中时会失败。

是否可以通过KeyListener来实现?

最佳答案

您可以使用 VerifyListener ,这个例子只允许 1-8 的数字:

    text.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent event) {
char[] charArray = event.text.toCharArray();
for (char testChar : charArray) {
if (testChar <= '0' || testChar >= '9') {
event.doit = false;
return;
}
}
}
});

此示例过滤掉所有特殊字符:

    text.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent event) {
event.text = event.text.replaceAll("[^A-Za-z0-9]", "");
}
});

关于java - 是否可以通过key listener检查SWT文本中粘贴的文本是否有特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27377510/

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