【问题标题】:JFormattedTextField value is different then what I have setJFormattedTextField 值与我设置的不同
【发布时间】:2017-01-16 12:54:45
【问题描述】:

我正在使用 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。

有人可以帮助我显示我们设置的相同值吗?提前致谢

【问题讨论】:

  • 要得到80%的显示值,设置的值不应该是0.80吗?
  • @trashgod 如果我将 0.8 设置为一个值,那么它会显示为 80% 但是当我单击该字段时,它只会显示为 0.8
  • 还可以考虑JSpinnerSliderSpinSlider
  • @trashgod 我们可以使用它们,但是我们如何使用 JFormattedTextField 实现相同的效果
  • 老实说,我认为这会令人困惑并且容易出错。

标签: java swing jformattedtextfield numberformatter


【解决方案1】:

我在这里遇到了问题。在内部,默认数字格式化程序在显示时将给定值乘以 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");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-31
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多