Ti posto l codice di una classe che non fa quello che ti serve ma ti fa capire come fare per otterlo.In pratica di basta derivare na classe da Jtextfield e subclassare anche la sua classe interna plainDocument che si occupa di gestirne l'input.

codice:
//------------------------------------------------------------------------
//  Semplice estensione della JTextField con due semplici features 
//  aggiuntive:
//
//  1) consentire di limitare il numero di massimo di caratteri inseribili
//     (cut and paste compresi)
//  2) introdurre un set di caratteri vietati da passare come semplice 
//     parametro String al costruttore
//------------------------------------------------------------------------
public class MyJTextField extends JTextField
{
	private int limit;
	private String charSet;
	public MyJTextField(int limit,String charSet)
	{
		super();
		this.limit=limit;
		this.charSet=charSet;
		setDocument(new TextLimitDocument(limit,charSet));
	}
	public MyJTextField(String charSet)
	{
		super();
		limit=-1;
		this.charSet=charSet;
		setDocument(new TextLimitDocument(limit,charSet));
	}
	public MyJTextField(int limit)
	{
		super();
		this.limit=limit;
		charSet=null;
		setDocument(new TextLimitDocument(limit,charSet));
	}
	public MyJTextField()
	{
		super();
		limit=-1;
		charSet=null;
		setDocument(new TextLimitDocument(limit,charSet));
	}
	public void setLimit(int limit)
	{
		this.limit=limit;
		setDocument(new TextLimitDocument(limit,charSet));
	}
	public void setCharSet(String charSet)
	{
		this.charSet=charSet;
		setDocument(new TextLimitDocument(limit,charSet));
	}
	public int getLimit()
	{
		return limit;
	}
	public String getCharSet()
	{
		return charSet;
	}

    
    
    //----------------------------------------------------
    //Classe interna per la gestione dell'input
    //----------------------------------------------------
    
    public class TextLimitDocument extends PlainDocument 
    {
   		private int limit;
   		private String charSet;
   
    
   		TextLimitDocument(int limit, String charSet) 
   		{
    		super();
    		this.limit = limit;
    		this.charSet=charSet;
    	}
  
   		public void insertString(int offset, String  str, AttributeSet attr)throws BadLocationException 
   		{
    		if (str == null) return;
      		if(limit!=-1)
      		{
      			if(charSet!=null)
      			{
      				if ((getLength() + str.length()) <= limit) 
    				{
      					char[] source = str.toCharArray(); 
      					String dest=new String();
      					for(int i=0;i<str.length();i++)
      						if(charSet.indexOf(source[i])==-1)
      							dest=dest+source[i];
      					super.insertString(offset, dest, attr);
      				}
      			}
      			else
      				if ((getLength() + str.length()) <= limit) 
      					super.insertString(offset, str, attr);
      		}
      		else
      		{
      			if(charSet!=null)
      			{
      				char[] source = str.toCharArray(); 
      				String dest=new String();
      				for(int i=0;i<str.length();i++)
      					if(charSet.indexOf(source[i])==-1)
      						dest=dest+source[i];
      				super.insertString(offset, dest, attr);
      			}
      			else
      				super.insertString(offset, str, attr);
      		}
      	}
	}
}
spero ti sia utile ciao