[英]How to force JFormattedTextField value to change dynamically
我想在JFormattedTextField
输入数字时看到格式化的数字。 例如,当用户键入124451000时,它必须在屏幕上动态显示为124.451.000,而不是在用户按Tab或Enter键时显示。
我想在输入第四个数字时在第三个数字之后输入一个点(例如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);
}
}
好吧,我尝试了这段代码,无法运行,另一个类中的My JFormattedTextField,我无法在另一个类中获得成功,我无法访问另一个类中的对象。
在这种情况下添加DocumentListener会有所帮助吗?
http://docs.oracle.com/javase/7/docs/api/javax/swing/event/DocumentListener.html
创建对JFormattedTextField的引用的侦听器,并在侦听器中进行格式化。
这段代码有什么问题。我无法更改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) {
//
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.