2016-06-14 133 views
1

我使用下面的代码NumberFomatterFactory设置为具有JFormattedTextField:将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中正确的方法是什么?

+3

1)请学习常见的Java命名(命名约定 - 例如'EachWordUpperCaseClass','firstWordLowerCaseMethod()','firstWordLowerCaseAttribute'除非它是一个'UPPER_CASE_CONSTANT'),并用它一致。 2)使用合乎逻辑的一致形式缩进代码行和块。缩进旨在使代码的流程更易于遵循! 3)为了更快地获得更好的帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。 –

回答

2

我无法重现您报告的异常;目前还不清楚为什么你根本赶不上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); 
    } 
} 
相关问题