全新的方向
以下是我的问题的 SSCCE。我正在尝试在输入输入时更新字段,在这种情况下,必须丢失焦点才能进行更新。
package test;
import java.awt.EventQueue;
import java.text.NumberFormat;
import javax.swing.JFormattedTextField;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.Document;
import javax.swing.text.NumberFormatter;
public class Test {
private JFormattedTextField input, input2;
private NumberFormatter formatter;
private DocumentListener listener;
public Test() {
formatter = new NumberFormatter(NumberFormat.getNumberInstance());
input = new JFormattedTextField(formatter);
input2 = new JFormattedTextField(formatter);
listener = new DocumentListener() {
private Document source = null;
protected void update(Document doc) {
if (source == null) {
System.out.println("Update");
source = doc;
if (source.equals(input.getDocument())) {
double temp;
temp = converter(((Number)input.getValue()).doubleValue());
input2.setValue(temp);
// input2.setText(Double.toString(temp));
} else if (source.equals(input2.getDocument())) {
double temp;
temp = converterBack(((Number)input2.getValue()).doubleValue());
input.setValue(temp);
// input.setText(Double.toString(temp));
}
source = null;
}
}
@Override
public void insertUpdate(DocumentEvent e) {
update(e.getDocument());
}
@Override
public void removeUpdate(DocumentEvent e) {
update(e.getDocument());
}
@Override
public void changedUpdate(DocumentEvent e) {
update(e.getDocument());
}
};
input.getDocument().addDocumentListener(listener);
input2.getDocument().addDocumentListener(listener);
input.setColumns(4);
input2.setColumns(4);
input.setValue(0.0);
JPanel panel = new JPanel();
panel.add(input);
panel.add(input2);
JOptionPane.showMessageDialog(null, panel);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new Test();
}
});
}
private double converter(double value) {
value = value * 2;
return value;
}
private double converterBack(double value){
value = value/2;
return value;
}
}
我需要能够将此代码与 'converter' 一起使用method
,因此不能将命令放入其中method Update()
。
我已经得到了这个工作,PropertyChangeListener
但显然这不是一个好的途径。