private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
int x=evt.getKeyCode();
if(x>=96&&x<=105)
{
evt.setKeyCode(8);//Here 8 is used for Backspace key to remove the numeric character entered
}
Int 这段代码我希望用户不要在 jTextField 中键入任何数值,但如果他这样做,那么我会尝试仅在运行时将其删除......我编写了这段代码,但它没有按照我的预期工作是... 请帮助我!!
最佳答案
您确实应该避免使用KeyListeners
,它们对于您最终想要实现的目标来说限制太多,并且当您尝试更改字段文档时,最终只会遇到突变异常该字段正在尝试更改文档。
你真的应该使用 DocumentFilter ,这就是它的设计目的。
((AbstractDocument)field.getDocument()).setDocumentFilter(new DocumentFilter() {
@Override
public void insertString(FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException {
StringBuilder sb = new StringBuilder(64);
for (char c : text.toCharArray()) {
if (Character.isDigit(c)) {
sb.append(c);
}
}
fb.insertString(offset, text, attr);
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
StringBuilder sb = new StringBuilder(64);
for (char c : text.toCharArray()) {
if (Character.isDigit(c)) {
sb.append(c);
}
}
fb.replace(offset, length, sb.toString(), attrs);
}
});
这是一个非常基本的示例,有很多相关内容。
除了避免突变异常之外,过滤器还会在更新到达文档/字段之前拦截更新,因此传入的更改在屏幕上不可见,您还可以捕获任何粘贴事件或 setText
来电。
关于java - 在运行时清除 jTextField 中键入的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12286073/