Java 将NumberFormatterFactory设置为JFormattedTextField的正确方法是什么?
我使用以下代码将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
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()
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);
}
}