本文介绍了FocusEvent没有得到JFormattedTextField的最后一个值,我怎么能得到它?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的 JFrame 对象上有两个 JFormattedTextField 对象。我想要一个基本的数学(加法)这些 JFormattedTextField 对象的值。当焦点丢失第一个或第二个文本字段时,我希望它发生。但是当 focusLost()时,事件没有得到最后一个值,它获得了前一个值。

例如; tf1 有0, tf2 最初为0。我写2到 tf1 ,当 focusLost(),结果( tf1 + tf2 )变成仍然为0.当我改变他们中的任何一个,结果变成2(前一个值)

如何获取最后的值focusLost?



以下是我的代码:

  JFormattedTextField tf1,tf2 ; 
NumberFormat format = NumberFormat.getNumberInstance();
tf1 = new JFormattedTextField(format);
tf1.addFocusListener(this);

tf2 = new JFormattedTextField(format);
tf2.addFocusListener(this);

focusLost()

  public void focusLost(FocusEvent e){
if(tf1.getValue()== null)tf1.setValue(0) ;
if(tf2.getValue()== null)tf2.setValue(0);
//因为如果我没有设置,它会为tf.getValue()抛出nullPointerException()

BigDecimal no1 = new BigDecimal(tf1.getValue()。toString());
BigDecimal no2 = new BigDecimal(tf2.getValue()。toString());
System.out.println(total:+(no1.add(no2)));


解决方案

我想你应该使用 PropertyChangeListener ,请参阅。
$ b

有一个例子使用 JFormattedTextField

  // ...发生初始化:
double amount;
JFormattedTextField amountField;
...
amountField.addPropertyChangeListener(value,
FormattedTextFieldListener());
...
class FormattedTextFieldListener实现PropertyChangeListener {
public void propertyChanged(PropertyChangeEvent e){
Object source = e.getSource();
if(source == amountField){
amount =((Number)amountField.getValue())。doubleValue();
...
}
... //重新计算付款和更新字段...
}
}


I have two JFormattedTextField objects on my JFrame object. I want a basic Math (addition) by the values of these JFormattedTextField objects. I want it happen when focus lost either the first or the second textfield. But when "focusLost()", event doesn't get the last value, it gets the previous value.

For example; tf1 has 0 and tf2 has 0 at first. I write 2 to tf1, and when focusLost(), result (tf1+tf2) become still 0. when I change any of them, the result becomes 2 (the previous value)

How do I get the last values on focusLost?

Here is my code:

JFormattedTextField tf1,tf2;
NumberFormat format=NumberFormat.getNumberInstance();
tf1=new JFormattedTextField(format);
tf1.addFocusListener(this);

tf2=new JFormattedTextField(format);
tf2.addFocusListener(this);

and focusLost():

public void focusLost(FocusEvent e) {
    if(tf1.getValue() == null) tf1.setValue(0);
    if(tf2.getValue() == null) tf2.setValue(0);
    //because if I dont set, it throws nullPointerException for tf.getValue()

    BigDecimal no1 = new BigDecimal(tf1.getValue().toString());
    BigDecimal no2 = new BigDecimal(tf2.getValue().toString());
    System.out.println("total: " + (no1.add(no2)));
}
解决方案

I think you should use a PropertyChangeListener, see How to Write a Property Change Listener.

There is an example using JFormattedTextField:

//...where initialization occurs:
double amount;
JFormattedTextField amountField;
...
amountField.addPropertyChangeListener("value",
                                      new FormattedTextFieldListener());
...
class FormattedTextFieldListener implements PropertyChangeListener {
    public void propertyChanged(PropertyChangeEvent e) {
        Object source = e.getSource();
        if (source == amountField) {
            amount = ((Number)amountField.getValue()).doubleValue();
            ...
        }
        ...//re-compute payment and update field...
    }
}

这篇关于FocusEvent没有得到JFormattedTextField的最后一个值,我怎么能得到它?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-05 01:28