2017-01-16 4 views
0

Я использую JFormattedTextField для отображения значений в процентах в текстовом поле, как показано ниже:значение JFormattedTextField отличается то, что я поставил

NumberFormat percentDisplayFormat = NumberFormat.getPercentInstance(); 
NumberFormat editFormat = NumberFormat.getNumberInstance(); 

percentDisplayFormat.setMinimumFractionDigits(2); 

NumberFormatter percentEditFormatter = new NumberFormatter(editFormat); 

JFormattedTextField jftfPercentage = new JFormattedTextField(new DefaultFormatterFactory(new NumberFormatter(percentDisplayFormat), new NumberFormatter(percentDisplayFormat), percentEditFormatter)); 

jftfPercentage.setBounds(113, 95, 236, 21); 
jftfPercentage.setName("JftfPercentage"); 

и установка значения, как показано ниже:

jftfPercentage.setValue(<someDoubleValue>); 

Теперь, предположим, что я установил значение как 80, тогда он отображает значение как 8000%.
Но всякий раз, когда я нажимаю на поле, оно отображается только как 80.

Может ли кто-нибудь помочь мне отобразить то же значение, что и мы. Заранее спасибо

+2

Чтобы получить отображаемое значение '80%', должно быть установлено значение '0.80'? – trashgod

+0

@trashgod, если я устанавливаю значение 0.8 в качестве значения, тогда он отображается как 80%, однако, когда я нажимаю на поданную, тогда он отображается только как 0,8. –

+0

Также рассмотрим 'JSpinner',' Slider' или ['SpinSlider'] (http://stackoverflow.com/a/6067986/230513). – trashgod

ответ

0

У меня проблема. Внутренний формат форматирования по умолчанию умножает заданное значение на 100 при его отображении. (Если мы используем PercentInstance)

NumberFormat percentDisplayFormat = NumberFormat.getPercentInstance(); 
NumberFormat editFormat = NumberFormat.getNumberInstance(); 

percentDisplayFormat.setMinimumFractionDigits(2); 

NumberFormatter percentEditFormatter = new NumberFormatter(editFormat); 

// This was the new change that I have made 
NumberFormatter percentDisplayFormatter = new NumberFormatter(percentDisplayFormat) 
{ 
    @Override 
    public String valueToString(Object o) throws ParseException 
    { 
     Double number = null; 
     if (o != null) 
     { 
      number = Double.valueOf(o.toString()); 
      number /= 100; 
     } 
     // In super class, it multiplies the number by 100. So as we are dividing the number by 100 here. In super level it will become the same value that we have given   
     return super.valueToString(number); 
    } 
}; 

JFormattedTextField jftfPercentage = new JFormattedTextField(new DefaultFormatterFactory(percentDisplayFormatter, percentDisplayFormatter, percentEditFormatter)); 

jftfPercentage.setBounds(113, 95, 236, 21); 
jftfPercentage.setName("JftfPercentage"); 
Смежные вопросы