В JTextField нет пробелов - PullRequest
       12

В JTextField нет пробелов

1 голос
/ 07 апреля 2009

Как я могу запретить пользователям помещать пробелы в JTextField?
Даже не должно быть возможности писать пробелы.

Ответы [ 3 ]

3 голосов
/ 07 апреля 2009

Я бы предложил установить Document для JTextField с расширенным PlainDocument, в котором вы переопределяете метод insertString. (Также приятно ограничить размер ...)
Что-то вроде:

Document doc = new PlainDocument() {
    @Override
    public void insertString(int offs, String str, AttributeSet attr)
    throws BadLocationException {
        String newstr = str.replaceAll(" ", "");  // could use "\\s" instead of " "
        super.insertString(offs, newstr, attr);
    }

    @Override
    public void replace(int offs, int len, String str, AttributeSet attr) 
    throws BadLocationException {
        String newstr = str.replaceAll(" ", "");  // could use "\\s" instead of " "
        super.replace(offs, len, newstr, attr);
    }
};
textField.setDocument(doc);

EDIT:
replace также необходимо переопределить / внедрить!

2 голосов
/ 07 апреля 2009

Вероятно, лучший способ добиться этого - использовать Document с DocumentFilter, который удаляет все напечатанные, вставленные или вставленные иным образом пробелы. Я написал запись в блоге о небольшой программе Swing, которая демонстрирует эту технику (в этом случае разрешить ввод только целых чисел) - Описание Источник .

Возможно расширение подтипа Document, но оно более подвержено ошибкам (и связывает вас с конкретной реализацией).

Попытка перехватить нажатие клавиш на самом деле не работает (это неверный уровень абстракции, поэтому упускается любой другой способ вставки текста, такой как вставка, dnd и т.

JFormattedTextField - хороший способ убедиться, что любой пользовательский интерфейс отстой.

1 голос
/ 07 апреля 2009

Вы можете использовать раскладку клавиатуры. Посмотрите этот пример Запрещенное пространство будет выглядеть так:

KeyStroke keyStroke = KeyStroke.getKeyStroke(Character.valueOf(' '), 0);
textField.getInputMap(JComponent.WHEN_FOCUSED).put(keyStroke, "none");
...