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

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

20.07.2014, 20:55. Показов 20628. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru