用javax.swing.JFormattedTextField试一试

解决方案 »

  1.   

    当JTextField失去焦点时检测一下格式,做一下转换
      

  2.   

    有一个重量级的方法:
    用一个jtable,设成只有一行一列,再写一个TableRenderer,久很容易实现了。不过就是怕你嫌太重了。
      

  3.   

    写个method,
    虽然有点麻烦,但语句也不多.
    用stringTokenizer来载取字符.
      

  4.   

    import java.util.*;
    import java.text.*;public class LocalTest
    {
    public static void main(String args[])
    {
    NumberFormat currNumberFormat;
        double currNumber = 352000.53;
    Locale currLocale = Locale.CHINA;
    currNumberFormat = NumberFormat.getCurrencyInstance(currLocale);
    String s = currNumberFormat.format(currNumber);
    System.out.println(s);
    }
    }
    先用String number =getText()得到用户输入的数字,然后用currNumberFormat.format()转化,如果转化成功的话,把转化后的字符串用setText()放到输入的JTextField中,但是在提交数据的时候用保存在number中的字符串再转化回double或者float!
      

  5.   

    to: farandfaraway(遥远)  和  flywind63(紫色的偶然)     结合两者,这方法太单纯了,我的期望是动态的匹配格式。
        而且照这样做还另外需要自行提供一个 String 存储数据。其实我自己的第一方案就是这样做。我测试一下文档时间做动态格式匹配,
    如果可以的话继承 JTextField 做一个
      

  6.   

    http://www.javaworld.com/javaworld/jw-06-2001/jw-0601-cents.html
    這裹是你要的
      

  7.   

    我试着用JTable做了一个,基本上可以实现。不过是万变不离其中了,把代码整理一下就可以轻易实现你想要的功能。如果你认为这样的代码太沉重了,你可以用JFormattedTextField,
    基本的原理还是一样的,只不过要自己写焦点事件。用两个Component切换,一个是Editor,一个是Renderer.    public void test() {
            try{
                final DecimalFormat df = new DecimalFormat("###,###.00");
                class TableModel extends DefaultTableModel{
                    public int getColumnCount(){
                        return 1;
                    }                public int getRowCount(){
                        return 1;
                    }
                    public boolean isCellEditable(int row, int col){
                        return true;
                    }
                }            class Renderer extends DefaultTableCellRenderer{
                    public Component getTableCellRendererComponent(JTable table, Object value,
                        boolean isSelected, boolean hasFocus, int row, int column) {
                        JLabel label = (JLabel)super.getTableCellRendererComponent(table,
                            value, isSelected, hasFocus, row, column);
                        if (value != null)
                            label.setText("¥" + value);
                        return label;
                    }
                }            JTable table = new JTable();
                table.setModel(new TableModel());
                table.getColumnModel().getColumn(0).setCellRenderer(new Renderer());
                table.setPreferredSize(new Dimension(200, 50));
                table.setRowHeight(50);
                jpnlButton.add(table, null);
        }
      

  8.   

    感谢 aiirii(ari-爱的眼睛), 但这个不是我所需要的。