Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/104: Рейтинг темы: голосов - 104, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 38

JFormattedTextField - Разрешить ввод только определенных символов

20.07.2014, 20:55. Показов 20722. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Использую MaskFormatter в компоненте JFormattedTextField. Это очень удобно, когда нужно ввести ограничение на ввод только цифр или только букв.

Но как разрешить ввод только определенных символов? (Например только буквы а,b,с) Или числел из диапазона (например от 1 до 100)

Может быть, можно создать собственную маску?

Заранее спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.07.2014, 20:55
Ответы с готовыми решениями:

JFormattedTextField() ввод значений по маске
public class AddFrame extends JDialog{ JFormattedTextField valueImei; ......... public AddFrame(){ ........ ...

Разрешить ввод в textBox только определенных символов
Здравствуйте. Пишу программу на с#, так как язык c# я знаю еще не очень, иду на форум. Суть программы в том что бы в определенные поля...

Разрешить закрытие программы только при вводе определенных символов
вопрос как сделать так чтоб программа закрывалась при определенном вводе комбинацыи цыфр или букв. тоесть вводим код нажимаем закрыть и...

10
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
21.07.2014, 01:53
Вот например реализация позволяющая задавать формат в виде регулярного выражения - http://www.java2s.com/Tutorial... tField.htm
Можете использовать его.
Или посмотреть как тут сделано и сделать свой, по аналогии.
0
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 38
21.07.2014, 08:23  [ТС]
Это не совсем то что нужно.

Мне необходимо чтобы недопустимые символы нельзя было бы даже напечатать.

Например есть текстовое поле и огринчение - только 1 или 2. Чтобы пользователь не нажимал в поле ввода будут отображаться только единицы и нули.

Как сделать такое?

Добавлено через 12 минут
Описался: Будут отображаться единицы и двойки
0
8 / 8 / 5
Регистрация: 20.10.2013
Сообщений: 49
21.07.2014, 08:48
KeyListener к полю привязать надо, постоянно проверяющий после нажатия клавиши, что же ты ввел. И если ввел не тот символ, делаешь откат на одно значение назад. Я делал так.
0
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 38
21.07.2014, 10:12  [ТС]
GyroReaper, хорошая мысль.

Можно кусочек кода, где это реализовано?

А то по неопытности понапишу чего лишеного.
0
8 / 8 / 5
Регистрация: 20.10.2013
Сообщений: 49
21.07.2014, 19:28
У меня реализовано не очень красиво. Для JTextField. Может быть надо перерисовку добавить. Сам разберешься дальше. Суть одна.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package сапер;
 
import javax.swing.JTextField;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
 
public class MyTextField extends JTextField implements KeyListener {
    
    private int maxlength;  //Максимальная длина
    private String oldtext; //Текст в поле
    
    public MyTextField(){   //Конструктор по умолчанию
        setMaxLength(0);
        init();
    }
    
    public MyTextField(int maxlength){   //Конструктор условия
        setMaxLength(maxlength);
        init();
    }
    
    
    public int getMaxLength(){  //Геттер максимальной длины
        return maxlength;
    }
    
    public void setMaxLength(int maxlength){   //Сеттер максимальной длины
        this.maxlength = maxlength;
    }
    
    public void keyPressed(KeyEvent e){ //Обработчик нажатия
        if(maxlength != 0){
            if(this.getText().length() > maxlength)
                this.setText(oldtext);
        }
        oldtext = this.getText();
    }
    
    public void keyReleased(KeyEvent e){
    }
    
    public void keyTyped(KeyEvent e){
    }
    
    private void init(){    //Инициализация(слушатель ввода и пустое поле
        oldtext = "";
        addKeyListener(this);
    }
    
}
1
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
22.07.2014, 10:55
Лучший ответ Сообщение было отмечено frosty7777777 как решение

Решение

и мой вариант
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
 
public class Jframe extends JFrame {
 
    public Jframe() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(500, 400, 400, 300);
        setLayout(null);
        JTextField tf = new JTextField(10);
        tf.setBounds(20, 20, 340, 30);
        add(tf);
        setVisible(true);
 
        // магия начинается тут
        ((AbstractDocument) tf.getDocument()).setDocumentFilter(new MyDocumentFilter());
    }
 
    public static void main(String[] args) {
        new Jframe();
    }
}
 
// например, мы хотим фильтровать цифры 1 3 5 7 9
class MyDocumentFilter extends DocumentFilter {
    @Override
    public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {
        string = string.replaceAll("[13579]", "");
        super.insertString(fb, offset, string, attr);
    }
    
    @Override
    public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
        text = text.replaceAll("[13579]", "");
        super.replace(fb, offset, length, text, attrs);
    }
}
2
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 38
22.07.2014, 13:40  [ТС]
Паблито, мне очень понравилась реализация.

Чтобы мы делали без регулярных выражений.

Кстати, ты дожен знать: Почему в регулярных выражениях используется две косые черты вместо одной (Например: .replaseAll("\\d")) ?
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
22.07.2014, 14:36
Ой, я настолько глубоко не копал, мне достаточно знать что их две
Наверное это как-то завязано на строковые литералы, кодировки и спец.символы типа \r \n и так далее.

Фишка моей реализации была не в регулярном выражении, а в DocumenFilter-е.
Там можно было пойти и традиционным способом - жонглировать стрингами, вырезать, склеивать, считать offset, но мне показалось, что проще все фильтровать регулярками.
1
0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 38
22.07.2014, 14:44  [ТС]
Очень изящное решение.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
22.07.2014, 15:08
Цитата Сообщение от frosty7777777 Посмотреть сообщение
Почему в регулярных выражениях используется две косые черты вместо одной?
Потому что java компилятор преобразует из двух в одну. Оставшаяся одна черта - часть самой регулярки.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.07.2014, 15:08
Помогаю со студенческими работами здесь

Ограничение на ввод символов (разрешить ввод только цифр)
Всем доброго времени суток! Я начал изучать С++ и у меня возник такой вопрос: Как ограничить ввод символов (разрешить ввод только...

Разрешить ввод только уникальных символов в TEdit
Здравствуйте! У меня имеется такой код: void __fastcall TForm2::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) ...

Ввод только определенных символов, удаление запрещенных символов из ячейки ввода
Добрый вечер! Подскажите, пожалуйста, как можно такое реализовать посредством jQuery. Вот форма: <div id="comment"> ...

Ввод в TextBox только определенных символов
Здравствуйте, как сделать чтоб поле textbox понимало только , а остальные символы - нет? Т.е в поле писать можно только латинскими...

Ввод в TextBox только определенных символов
Суть проблемы такова: что нужно прописать в окно TextBox, чтобы в поле можно было ввести только числа , знак -, и чтобы, если в поле...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru