Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jFormattedtextField 
V
    Опции темы
Swatch
Дата 31.8.2007, 06:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 453
Регистрация: 2.7.2007

Репутация: нет
Всего: 1



Добрый день.

Помогите, кто чем может, пожалуйста. 
Поставили следующую задачу: а поля, куда должны вводиться денежки, чтобы ввод осуществлялся по формату  #,###, где "," - это разделитель тысяч. 

Нашла jFormattedTextField, но не могу разобраться, что надо сделать. Написала вот так:

Код

        MaskFormatter mf = null;
        try {
            mf = new MaskFormatter("#,###");
        } catch (ParseException ex) {
        }
        mf.setPlaceholderCharacter('#');
        mf.install(jFormattedTextField1);


Но теперь больше 9тысяч 999 рублей ввести нельзя. И если, например, я введу всего одну цифру, то она будет рассматриваться как тысяча?

Добавлено через 2 минуты и 15 секунд
И еще. Значения из полей мне надо записывать в базу. Но значения в базе типа Double и ничего не сохраняется.:( Как то можно получить значение без маски? И что вообще делать в этом случае?
PM MAIL   Вверх
eXcile
Дата 31.8.2007, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 8.2.2007

Репутация: нет
Всего: 5



можно использовать NumberFormatter
Код

                    NumberFormat number = new DecimalFormat("#,###");    
            number.setMaximumIntegerDigits(6);                 // максимальное количество циферок
            
            numberField = new JFormattedTextField(new NumberFormatter(number));    
            numberField.setColumns(7);
            numberField.setValue(new Integer(123456));     
            
            Integer i = (Integer)numberField.getValue();
            System.out.println(i);

--------------------
Не становитесь рабом шаблона [Винсент Ван Гог]
PM MAIL   Вверх
Swatch
Дата 31.8.2007, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 453
Регистрация: 2.7.2007

Репутация: нет
Всего: 1



Хммм... почему-то не работает... то есть текст филд вообще пустой... и если туда вводить цифры, то никаких запятых там не расставляется...
и что еще делает вот эта строка : numberField.setColumns(7); ?
PM MAIL   Вверх
eXcile
Дата 31.8.2007, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 8.2.2007

Репутация: нет
Всего: 5



Цитата(Swatch @  31.8.2007,  08:13 Найти цитируемый пост)
и если туда вводить цифры, то никаких запятых там не расставляется...

разделителем является не запятэ, а пробел. фишка в том, что значение отформатируется при смене фокуса


Цитата(Swatch @  31.8.2007,  08:13 Найти цитируемый пост)
и что еще делает вот эта строка : numberField.setColumns(7); ?

определяет длину поля, в количестве символов
--------------------
Не становитесь рабом шаблона [Винсент Ван Гог]
PM MAIL   Вверх
Swatch
Дата 31.8.2007, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 453
Регистрация: 2.7.2007

Репутация: нет
Всего: 1



а можно делать разделителем все-таки запятую? если можно, то как?
PM MAIL   Вверх
dorogoyIV
Дата 31.8.2007, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Цитата(Swatch @  31.8.2007,  08:42 Найти цитируемый пост)
а можно делать разделителем все-таки запятую? если можно, то как?


replace(" ",",");  smile 
PM MAIL   Вверх
eXcile
Дата 31.8.2007, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 8.2.2007

Репутация: нет
Всего: 5



Цитата(Swatch @  31.8.2007,  08:42 Найти цитируемый пост)
а можно делать разделителем все-таки запятую? если можно, то как?

вот так:
Код

DecimalFormatSymbols dfs = new DecimalFormatSymbols();
            dfs.setGroupingSeparator(',');
            DecimalFormat number = new DecimalFormat("#,###",dfs);    
            number.setMaximumIntegerDigits(6);                 // максимальное количество циферок
            numberField = new JFormattedTextField(new NumberFormatter(number));    
            numberField.setColumns(15);
            numberField.setValue(new Integer(123456));     
            
            Integer i = (Integer)numberField.getValue();
            System.out.println(i);

--------------------
Не становитесь рабом шаблона [Винсент Ван Гог]
PM MAIL   Вверх
Swatch
Дата 31.8.2007, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 453
Регистрация: 2.7.2007

Репутация: нет
Всего: 1



Не помогает. Написано так:

Код

        DecimalFormatSymbols dfs = new DecimalFormatSymbols();
        dfs.setGroupingSeparator(',');
        DecimalFormat number = new DecimalFormat("#,###", dfs);  
        number.setMaximumIntegerDigits(6);  // максимальное количество циферок
            
        jFormattedTextField1 = new JFormattedTextField(new NumberFormatter(number));   


Все равно ничего не делает.... Ввожу цифры и, даже при потере фокуса, ничего не происходит... 
Может быть дело в том, что я пишу в NetBeans и часть кода там генерится сама.

Вот, что генерит NetBeans 
Код

        jFormattedTextField1 = new javax.swing.JFormattedTextField();
...
        jFormattedTextField1.setColumns(15);
        jFormattedTextField1.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jFormattedTextField1FocusGained(evt);
            }
        });


все это написано в initComponents(); а потом, в методе, где initComponents() вызывается, после я пишу тот код, который привела сначала. Но ничего не происходит smile 
PM MAIL   Вверх
eXcile
Дата 31.8.2007, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 8.2.2007

Репутация: нет
Всего: 5



а если твой код вставить в initComponents()? т.е. подредактировать там, где 
Цитата(Swatch @  31.8.2007,  12:48 Найти цитируемый пост)
в NetBeans и часть кода там генерится сама


--------------------
Не становитесь рабом шаблона [Винсент Ван Гог]
PM MAIL   Вверх
Swatch
Дата 31.8.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 453
Регистрация: 2.7.2007

Репутация: нет
Всего: 1



а там нельзя редактировать... даже если это отредактировать откуда-нить, то это может потом вызвать ошибки и потом вообще все упадет... пройденный этап уже...
PM MAIL   Вверх
eXcile
Дата 31.8.2007, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 8.2.2007

Репутация: нет
Всего: 5



приведи код этого класса

Это сообщение отредактировал(а) eXcile - 31.8.2007, 13:26
--------------------
Не становитесь рабом шаблона [Винсент Ван Гог]
PM MAIL   Вверх
Swatch
Дата 31.8.2007, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 453
Регистрация: 2.7.2007

Репутация: нет
Всего: 1



Код

public class DisposalCostPanel extends javax.swing.JPanel implements IPanelSave{
    
/** Creates new form DisposalCostPanel */
    public DisposalCostPanel() {
        initComponents();// вот здесь то и создаются все компоненты
                
        DecimalFormatSymbols dfs = new DecimalFormatSymbols();
        dfs.setGroupingSeparator(',');
        DecimalFormat number = new DecimalFormat("#,###", dfs);  
        number.setMaximumIntegerDigits(6);  // максимальное количество циферок
            
        jFormattedTextField1 = new JFormattedTextField(new NumberFormatter(number)); 

PM MAIL   Вверх
eXcile
Дата 31.8.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 168
Регистрация: 8.2.2007

Репутация: нет
Всего: 5



если я правильно думаю, то у тебя создается всего один текстфилд, это тот который описан в initComponents, а текстфилда из DisposalCostPanel() вообще нет. Вся соль в том, чтобы втексте присутствовала запятая, а это происходит из-за указания форматированного текста DecimalFormat. может есть какие-нибудь ссылки на компоненты? и надо через них работать? с NetBeans не работал, поэтому объективно объяснить не могу...
--------------------
Не становитесь рабом шаблона [Винсент Ван Гог]
PM MAIL   Вверх
Swatch
Дата 31.8.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 453
Регистрация: 2.7.2007

Репутация: нет
Всего: 1



Сделала вот так:

Код

DecimalFormatSymbols dfs = new DecimalFormatSymbols();
        dfs.setGroupingSeparator(',');
        AbstractFormatter displayFormatter = new NumberFormatter(new DecimalFormat("#,###", dfs));
    ((NumberFormatter)displayFormatter).setValueClass(Double.class);
        AbstractFormatter editFormatter = new NumberFormatter(new DecimalFormat("#,###"));
    ((NumberFormatter)editFormatter).setValueClass(Double.class);
        

        
        jFormattedTextField1.setFormatterFactory(new DefaultFormatterFactory(displayFormatter,displayFormatter,editFormatter));


Возникла другая проблема. Мне надо, чтобы при потере фокуса у компонента jFormattedTextField1 пересчитывалась сумма одна. Для этого надо брать значение jFormattedTextField1. Но значение обновляется только после потери фокуса, то есть на само событие значение jFormattedTextField1 остается то, которое было до ввода. 
Есть ли какая-нибудь функция, которая позволит обновить значение jFormattedTextField1 во время потери фокуса?
PM MAIL   Вверх
fixxer
Дата 31.8.2007, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 15
Всего: 27



Нужно вешать листенер не на потерю фокуса, а на изменение значения.
Код

jFormattedTextField1.addPropertyChangeListener("value", ...)



--------------------
user posted image
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0923 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.