2016-09-02 13 views
3

これは私のコードです:jFormatedTextField通貨形式

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

時にユーザーの入力値Iは、(2.33)のように、ポイントと(2€にformatedtextfield変更を問題を取得しています)これはユーザーが有効な値を入力したためではありません。 結果が(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€

EDITED:1週間前、これはうまくいきました。別のウィンドウでこのプロジェクトをマウントした後に問題が表示されます。この時点で私はポルトガル語のキーボードを持っています。問題が任意のウィンドウまたはシステムプロパティに関係している可能性はありますか?

編集:まだヘルプを探しています。誰でも??? :あなたは何かがによって制限フォーマッタを定義する(「one week ago this was working, after i mount this project in another windows the issue appear....」)

  • および/またはそこにあなたができるあなたの説明で間違っていたことを確認し、代わりにプレーンなバニラのDecimalFormatの、getCurrencyInstance()を使用する必要が

  • 答えて

    1
    • Locale

    • 私はCurrencyInstanceを使用するのではないでしょう、私にとっては素敵ではない、そこにNavigationFilterを使用することによって(例えばEuro = EUR)のために本当の簡略名を強制することが可能であるとPOSの文字setDot/moveDotと行のition、code example by @camickr

    • ここでは簡単な規格で、あなたのthatsデフォルトは申し訳ありませんが、私は、\ =あなたのコードを理解しない、

    enter image description here

    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(); 
          } 
         }); 
        } 
    } 
    
    +0

    を必要と – user3753426