2013-09-26 69 views
0

我想在输入JFormattedTextField中的数字时看到格式化数字。例如,当用户键入124451000时,它必须在屏幕上动态显示为124.451.000,而不是在用户按Tab或Enter键时显示。如何强制JFormattedTextField值动态更改

我希望在输入第四个数字后紧跟第三个数字(例如2.566)。


public class MyDocListener implements DocumentListener{ 
    NumberFormat nf = NumberFormat.getIntegerInstance(Locale.GERMAN); 
    NumberFormatter nff = new NumberFormatter(nf); 
    DefaultFormatterFactory factory = new DefaultFormatterFactory(nff); 
    final String newline = "\n"; 

    public void insertUpdate(DocumentEvent e) { 
     updateLog(e, "inserted into"); 
     NumberFormat numberFormatter = new DecimalFormat("#,###,###"); 
     // I put this code to change the format. 
    } 
    public void removeUpdate(DocumentEvent e) { 
     updateLog(e, "removed from"); 
    } 
    public void changedUpdate(DocumentEvent e) { 
     //Plain text components don't fire these events. 
    } 

    public void updateLog(DocumentEvent e, String action) { 
    Document doc = (Document)e.getDocument(); 
    int changeLength = e.getLength(); 
    displayArea.append(
     changeLength + " character" + 
     ((changeLength == 1) ? " " : "s ") + 
     action + doc.getProperty("name") + "." + newline + 
     " Text length = " + doc.getLength() + newline); 
} 


} 

嗯,我在另一个类中尝试这种代码,我不能跑,我的JFormattedTextField,我不能在另一个class.I succced无法访问对象,它是另一个类。

回答

0

在这种情况下会添加DocumentListener帮助吗?

http://docs.oracle.com/javase/7/docs/api/javax/swing/event/DocumentListener.html

创建到JFormattedTextField的参考监听器和监听器内做你的格式。

+0

嗯,我做到了,但我不能改变其写作时间 – Alify

+0

的NumberFormat的NumberFormatter在JFormattedTextField中文字; public class MyDocumentListener implements DocumentListener public void insertUpdate(DocumentEvent e){ numberFormatter = new DecimalFormat(“#,###,###”); } } myJFormattedTextFrield.getDocument()。addDocumentListener(new MyDocumentListener()); – Alify

+0

谢谢EyeOfTheHawks – Alify

0

这段代码有什么问题,我无法更改JformattedTextfield的格式。我用不同的类

我的主类

import javax.swing.JFormattedTextField; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 
import java.awt.FlowLayout; 
public class MainClass extends JFrame { 
private JPanel contentPane; 
private JFormattedTextField MyTextField; 
public static void main(String[] args) { 
    new MainClass(); 
} 
public MainClass() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); 
    MyTextField=new JFormattedTextField(); 
    MyTextField.setColumns(20); 
    MyTextField.getDocument().addDocumentListener(new MyDocumentListener()); 
    contentPane.add(MyTextField); 
    this.setVisible(true); 
    } 
} 

MyDocumentListener类

import java.text.NumberFormat; 
import java.util.Locale; 
import javax.swing.event.DocumentEvent; 
import javax.swing.event.DocumentListener; 
import javax.swing.text.NumberFormatter; 
public class MyDocumentListener implements DocumentListener{ 
    NumberFormat fmt; 
    public void insertUpdate(DocumentEvent e) { 
    fmt = NumberFormat.getCurrencyInstance(Locale.GERMAN); 
    MainClass.MyTextField.setFormat(fmt);//I get error in this this line. 
               //MyTextField is invisible here 
} 
public void removeUpdate(DocumentEvent e) { 
    // 
} 
public void changedUpdate(DocumentEvent e) { 
    // 
} 
}