gpt4 book ai didi

java - 将 NumberFomatterFactory 设置为 JFormattedTextField 的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-30 02:53:55 24 4
gpt4 key购买 nike

我使用以下代码将 NumberFomatterFactory 设置为 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)

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

最佳答案

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

  • 添加第二个组件将使您能够看到焦点变化的效果。

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

image

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);
}
}

关于java - 将 NumberFomatterFactory 设置为 JFormattedTextField 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37805958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com