gpt4 book ai didi

java - FocusEvent 没有获取 JFormattedTextField 的最后一个值,我如何获取它?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:47:22 26 4
gpt4 key购买 nike

我的 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);
//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)));
}

最佳答案

我认为你应该使用 PropertyChangeListener,参见 How to Write a Property Change Listener .

有一个使用 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...
}
}

关于java - FocusEvent 没有获取 JFormattedTextField 的最后一个值,我如何获取它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6803976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com