Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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 实时用户输入的JFormattedTextField货币格式_Java_Swing_Format_Currency_Jformattedtextfield - Fatal编程技术网

Java 实时用户输入的JFormattedTextField货币格式

Java 实时用户输入的JFormattedTextField货币格式,java,swing,format,currency,jformattedtextfield,Java,Swing,Format,Currency,Jformattedtextfield,这是我的代码: // create the formatters, default, display, edit NumberFormatter defaultFormatter = new NumberFormatter(new DecimalFormat("#.##")); NumberFormatter displayFormatter = new NumberFormatter(new DecimalFormat("#.##€")); NumberFormatter editFormat

这是我的代码:

// create the formatters, default, display, edit
NumberFormatter defaultFormatter = new NumberFormatter(new DecimalFormat("#.##"));
NumberFormatter displayFormatter = new NumberFormatter(new DecimalFormat("#.##€"));
NumberFormatter editFormatter = new NumberFormatter(new DecimalFormat("#.##")); 
// set their value classes
defaultFormatter.setValueClass(Double.class);
displayFormatter.setValueClass(Double.class);
editFormatter.setValueClass(Double.class);   
// create and set the DefaultFormatterFactory
DefaultFormatterFactory valueFactory = new DefaultFormatterFactory(defaultFormatter,displayFormatter,editFormatter);
jFormattedTextField4.setFormatterFactory(valueFactory);
jFormattedTextField1.setFormatterFactory(valueFactory);
当用户输入一个带有点的值时,比如(2.33),FormattedTextField会更改为(2€),这是不应该的,因为用户输入了一个有效的值。 如果用户输入(2,33),则结果为(2,33),并且同样不应为(2,33),因为应为(2.33)

基本上我总是想要格式(X.XX)。 例如:

输入与我想要的: 2-2.00€ / 2,22-2.22€ / 312.54-312.54€ / 432-432.00€ / 2,2-2.20欧元

编辑:一周前这是工作,在我挂载这个项目在另一个窗口的问题出现。现在我有一个葡萄牙语键盘。问题是否可能涉及任何windows或系统属性

编辑:我仍在寻求帮助。有人吗s

  • 您必须使用,而不是普通的DecimalFormat,确保您的描述中出现错误(
    一周前,这是可行的,在我将此项目装入另一个窗口后,问题出现了……

  • 和/或您可以在此处定义受

  • 我不会使用
    CurrencyInstance
    ,这对我不好,可以通过使用
    导航过滤器
    和带有
    setDot
    /
    moveDot
    的行中的字符位置来强制使用(例如
    欧元
    =
    欧元
    欧元
    )的真实速记名称

  • 以下是您需要的简单标准和默认值

import java.awt.*;
import java.awt.font.TextAttribute;
import java.math.*;
import java.text.*;
import java.util.Map;
import javax.swing.*;
import javax.swing.JFormattedTextField.*;
import javax.swing.event.*;
import javax.swing.text.InternationalFormatter;

public class DocumentListenerAdapter {

    public DocumentListenerAdapter() {
        JFrame frame = new JFrame("AbstractTextField Test");
        final JFormattedTextField textField1 = new JFormattedTextField(new Double(10.01));
        textField1.setFormatterFactory(new AbstractFormatterFactory() {
            @Override
            public AbstractFormatter getFormatter(JFormattedTextField tf) {
                NumberFormat format = DecimalFormat.getCurrencyInstance();
                format.setMinimumFractionDigits(2);
                format.setMaximumFractionDigits(2);
                format.setRoundingMode(RoundingMode.HALF_UP);
                InternationalFormatter formatter = new InternationalFormatter(format);
                formatter.setAllowsInvalid(false);
                //formatter.setMinimum(0.0);
                //formatter.setMaximum(1000.00);
                return formatter;
            }
        });
        final Map attributes = (new Font("Serif", Font.BOLD, 16)).getAttributes();
        attributes.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON);
        final JFormattedTextField textField2 = new JFormattedTextField(new Double(10.01));
        textField2.setFormatterFactory(new AbstractFormatterFactory() {
            @Override
            public AbstractFormatter getFormatter(JFormattedTextField tf) {
                NumberFormat format = DecimalFormat.getInstance();
                format.setMinimumFractionDigits(3);
                format.setMaximumFractionDigits(3);
                format.setRoundingMode(RoundingMode.HALF_UP);
                InternationalFormatter formatter = new InternationalFormatter(format);
                formatter.setAllowsInvalid(false);
                //formatter.setMinimum(0.0);
                //formatter.setMaximum(1000.00);
                return formatter;
            }
        });
        textField2.getDocument().addDocumentListener(new DocumentListener() {
            @Override
            public void changedUpdate(DocumentEvent documentEvent) {
                printIt(documentEvent);
            }

            @Override
            public void insertUpdate(DocumentEvent documentEvent) {
                printIt(documentEvent);
            }

            @Override
            public void removeUpdate(DocumentEvent documentEvent) {
                printIt(documentEvent);
            }

            private void printIt(DocumentEvent documentEvent) {
                DocumentEvent.EventType type = documentEvent.getType();
                double t1a1 = (((Number) textField2.getValue()).doubleValue());
                if (t1a1 > 1000) {
                    Runnable doRun = new Runnable() {
                        @Override
                        public void run() {
                            textField2.setFont(new Font(attributes));
                            textField2.setForeground(Color.red);
                        }
                    };
                    SwingUtilities.invokeLater(doRun);
                } else {
                    Runnable doRun = new Runnable() {
                        @Override
                        public void run() {
                            textField2.setFont(new Font("Serif", Font.BOLD, 16));
                            textField2.setForeground(Color.black);
                        }
                    };
                    SwingUtilities.invokeLater(doRun);
                }
            }
        });
        //https://stackoverflow.com/a/20008786/714968
        JFormattedTextField jftf2 = new JFormattedTextField();
        final InternationalFormatter fmt = new InternationalFormatter(
                new MessageFormat("{0,number,000}-{1,number,0000}"));
        jftf2.setFormatterFactory(new JFormattedTextField.AbstractFormatterFactory() {
            @Override
            public JFormattedTextField.AbstractFormatter getFormatter(JFormattedTextField tf) {
                return fmt;
            }
        });
        jftf2.setValue(new Object[]{111, 1234});
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(textField1, BorderLayout.NORTH);
        frame.add(textField2, BorderLayout.CENTER);
        frame.add(jftf2, BorderLayout.SOUTH);
        frame.setVisible(true);
        frame.pack();
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                DocumentListenerAdapter main = new DocumentListenerAdapter();
            }
        });
    }
}