在运行时在jTextField中清除键入的字符 private void jTextField1KeyPressed(java.awt.event.KeyEvent evt){ int x=evt.getKeyCode(); 如果(x>=96&&x
你真的应该避免在运行时在jTextField中清除键入的字符 private void jTextField1KeyPressed(java.awt.event.KeyEvent evt){ int x=evt.getKeyCode(); 如果(x>=96&&x,java,swing,awt,jtextfield,keyevent,Java,Swing,Awt,Jtextfield,Keyevent,你真的应该避免keylisters,那么它们对于你最终想要实现的目标来说太有限了,当你试图在字段试图更改文档的同时更改字段文档时,你只会得到一个变异异常 你真的应该使用a,这就是它的设计目的 private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) { int x=evt.getKeyCode(); if(x>=96&&x<=105) { evt.setKeyCode(8);//He
keylisters
,那么它们对于你最终想要实现的目标来说太有限了,当你试图在字段试图更改文档的同时更改字段文档时,你只会得到一个变异异常
你真的应该使用a,这就是它的设计目的
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
}
这是一个非常基本的例子,有很多这样的例子
除了避免变异异常,过滤器在更新到达文档/字段之前拦截更新,因此传入的更改在屏幕上不可见,您还可以捕获任何粘贴事件或
setText
调用。虽然这可能不是最好的方法,但这里有一个非常简单的方法
您可以像这样覆盖JTextField
的paintComponent()
方法:
((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);
}
});
不要用两种不同的方式问同一个问题;将此问题与第一个问题合并。可能的重复。亲爱的loed no,NEVER,NEVER,NEVER,NEVER,change,在任何绘制方法中更改UI组件,您都将通过重复的重新绘制请求消耗te CPU
JTextField textField = new JTextField(text) {
@Override
protected void paintComponent(Graphics grphcs) {
super.paintComponent(grphcs);
String newStr = "";
for (char c : getText().toCharArray()) {
if (!Character.isDigit(c)) {
newStr += c;
}
}
setText(newStr);
}
};