Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将NumberFormatterFactory设置为JFormattedTextField的正确方法是什么?_Java_Swing_Numberformatexception_Jformattedtextfield - Fatal编程技术网

Java 将NumberFormatterFactory设置为JFormattedTextField的正确方法是什么?

Java 将NumberFormatterFactory设置为JFormattedTextField的正确方法是什么?,java,swing,numberformatexception,jformattedtextfield,Java,Swing,Numberformatexception,Jformattedtextfield,我使用以下代码将NumberFormatterFactory设置为JFormattedTextField: try{ JFormattedTextField ccyTxt = new JFormattedTextField(); DecimalFormat ccyTxtFormat = (DecimalFormat) DecimalFormat.getNumberInstance(); ccyTxtFormat.setMaximumIntegerDigits((i

我使用以下代码将NumberFormatterFactory设置为JFormattedTextField:

    try{
    JFormattedTextField ccyTxt = new JFormattedTextField();
    DecimalFormat ccyTxtFormat = (DecimalFormat) DecimalFormat.getNumberInstance();
    ccyTxtFormat.setMaximumIntegerDigits((int) 13);
    ccyTxtFormat.setMaximumFractionDigits((int) 5);
    ccyTxtFormat.setMinimumIntegerDigits(0);
    ccyTxtFormat.setMinimumFractionDigits(0);
    NumberFormatter ccyTxtFormatter = new NumberFormatter(ccyTxtFormat);
    ccyTxtFormatter.setAllowsInvalid(true);
    DefaultFormatterFactory ccyTxtDecimalFormatterFactory = new DefaultFormatterFactory(ccyTxtFormatter);
    ccyTxt.setFormatterFactory(ccyTxtDecimalFormatterFactory);
    } catch(Exception ex) {
    ex.printStackTrace();
    }
但是,得到如下异常:

java.lang.IllegalArgumentException: Cannot format given Object as a Number
        at java.text.DecimalFormat.format(DecimalFormat.java:487)
        at java.text.Format.format(Format.java:140)

将NumberFormatterFactory设置为JFormattedTextField的正确方法是什么?

我无法重现您报告的异常;不清楚为什么会捕获异常。下面的完整示例可能会帮助您单独研究该问题。特别是,

  • 添加第二个组件将允许您看到焦点更改的效果

  • 使用
    setColumns()
    指定初始大小

1) 请学习常见的Java命名法(命名约定-例如
EachWordUpperCaseClass
firstWordLowerCaseMethod()
firstWordLowerCaseAttribute
,除非它是
大写常量
),并一致使用它。2) 使用缩进代码行和代码块的逻辑和一致形式。缩进的目的是使代码的流程更易于遵循!3) 为了更快地获得更好的帮助,请发布一个or。
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.text.DecimalFormat;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.text.DefaultFormatterFactory;
import javax.swing.text.NumberFormatter;

/**
 * @see http://stackoverflow.com/a/37807744/230513
 */
public class Test {

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new GridLayout(0, 1));

        JFormattedTextField ccyTxt = new JFormattedTextField();
        DecimalFormat ccyTxtFormat = (DecimalFormat) DecimalFormat.getNumberInstance();
        ccyTxtFormat.setMaximumIntegerDigits((int) 13);
        ccyTxtFormat.setMaximumFractionDigits((int) 5);
        ccyTxtFormat.setMinimumIntegerDigits(0);
        ccyTxtFormat.setMinimumFractionDigits(0);
        NumberFormatter ccyTxtFormatter = new NumberFormatter(ccyTxtFormat);
        ccyTxtFormatter.setAllowsInvalid(true);
        DefaultFormatterFactory CcyTxtDecimalFormatterFactory = new DefaultFormatterFactory(ccyTxtFormatter);
        ccyTxt.setFormatterFactory(CcyTxtDecimalFormatterFactory);
        ccyTxt.setColumns(12);

        f.add(ccyTxt);
        f.add(new JButton("Button"));
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Test()::display);
    }
}