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中键入任何数值,但如果他这样做,那么我试图在运行时只删除它....我写了这段代码,但它没有工作,因为我期望它是... Plzz帮助我!!
答案 0 :(得分:2)
你真的应该避免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);
}
});
这是一个非常基本的例子,SO上有很多。
除了避免突变异常之外,过滤器在到达文档/字段之前拦截更新,因此传入的更改将不会在屏幕上显示,您还可以捕获任何粘贴事件或setText
调用。 / p>
答案 1 :(得分:0)
虽然也许不是最好的方法,但这是一种非常简单的方法。
您可以像这样覆盖paintComponent()
的{{1}}方法:
JTextField