if(ch < 0x20 || ch == 0x7f)
if(ch != '\b' && (ch < 0x20 || ch == 0x7f))
	public static KeyEvent processKeyEvent(KeyEvent evt)	{		int keyCode = evt.getKeyCode();		int modifiers = evt.getModifiers();		char ch = evt.getKeyChar();		switch(evt.getID())		{		case KeyEvent.KEY_PRESSED:			// get rid of keys we never need to handle			if(keyCode == KeyEvent.VK_CONTROL ||				keyCode == KeyEvent.VK_SHIFT ||				keyCode == KeyEvent.VK_ALT ||				keyCode == KeyEvent.VK_META)				return null;			// get rid of undefined keys			if(keyCode == '\0')				return null;			lastWasAltGR = (modifiers == (KeyEvent.ALT_MASK | KeyEvent.CTRL_MASK)				|| modifiers == (KeyEvent.ALT_MASK | KeyEvent.CTRL_MASK				| KeyEvent.SHIFT_MASK));			if((modifiers & (~ (ALT_GRAPH_MASK | KeyEvent.SHIFT_MASK))) != 0				&& isBrokenKey(modifiers,keyCode))				lastKeyTime = System.currentTimeMillis();			else				lastKeyTime = 0L;			return evt;		case KeyEvent.KEY_TYPED:			if((modifiers & (~ (ALT_GRAPH_MASK | KeyEvent.SHIFT_MASK))) != 0)				return null;			if(ch == KeyEvent.CHAR_UNDEFINED)				return null;			if(ch < 0x20 || ch == 0x7f)				return null;			// some Java versions send a Control+Alt KEY_PRESSED			// before an AltGR KEY_TYPED...			if(lastWasAltGR && (modifiers & ALT_GRAPH_MASK) != 0)			{				lastWasAltGR = false;				lastKeyTime = 0L;				return evt;			}			// with some Java versions, the modifiers are			// lost in the KEY_TYPED event. As a very crude			// workaround, we get rid of KEY_TYPED events			// that occur 500ms or less after KEY_RELEASED			if(System.currentTimeMillis() - lastKeyTime < 500)			{				lastWasAltGR = false;				lastKeyTime = 0L;				return null;			}			return evt;		default:			return evt;		}	}