Большое спасибо за ответы. Я решил использовать ответ Итая, чтобы решить проблему. Вот мое решение.
DocumentFilter dfilter = new FileNameFilter();
JTextField codeTF = new JTextField();
((AbstractDocument) codeTF.getDocument()).setDocumentFilter(dfilter);
Вот FileNameFilter, который блокирует вставленные недопустимые символы. Это должно работать в Unix, Windows и Mac OS.
class FileNameFilter extends DocumentFilter
{
private static final char[] ILLEGAL_CHARACTERS = {'/', '\n', '\r', '\t', '\0', '\f', '`', '?', '*', '\\', '<', '>', '|', '\"', ':', '.'};
public void insertString (DocumentFilter.FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException
{
fb.insertString (offset, fixText(text).toUpperCase(), attr);
}
public void replace (DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attr) throws BadLocationException
{
fb.replace(offset, length, fixText(text).toUpperCase(), attr);
}
private String fixText (String s)
{
StringBuilder sb = new StringBuilder();
for(int i = 0; i < s.length(); ++i)
{
if (!isIllegalFileNameChar (s.charAt (i)))
sb.append (s.charAt (i));
}
return sb.toString();
}
private boolean isIllegalFileNameChar (char c)
{
boolean isIllegal = false;
for (int i = 0; i < ILLEGAL_CHARACTERS.length; i++)
{
if (c == ILLEGAL_CHARACTERS[i])
isIllegal = true;
}
return isIllegal;
}
}
JFormattedTextField также кажется хорошим решением, но ответ Итая был для меня более простым. Большое спасибо!