2013-09-26 64 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) { 
    // 
} 
}