FocusEvent 无法获取 JFormattedTextField 的最后一个值,我如何获取它?
我的 JFrame
对象上有两个 JFormattedTextField
对象。我想要通过这些 JFormattedTextField
对象的值进行基本数学运算(加法)。我希望当焦点丢失第一个或第二个文本字段时发生这种情况。但是当“focusLost()
”时,事件没有获取最后一个值,而是获取前一个值。
例如;首先,tf1
为 0,tf2
为 0。我向 tf1
写入 2,当 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)));
}
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)));
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我认为您应该使用
PropertyChangeListener
,请参阅如何编写属性更改侦听器。有一个使用 JFormattedTextField 的示例:
I think you should use a
PropertyChangeListener
, see How to Write a Property Change Listener.There is an example using
JFormattedTextField
:您的 JFormattedTextField tf1,tf2 中是否有一些默认的数字值集;
例如,对我来说,无需 NPE 即可工作
is there some defalut Number value sets in your JFormattedTextField tf1,tf2;
for me works without NPE, for example
JFormattedTextField
< 的默认行为focusLost
上的 /a> 是COMMIT_OR_REVERT
,因此一种方法是在焦点侦听器结束后进行更新。 延续效果很好,如下所示。The default behavior of
JFormattedTextField
onfocusLost
isCOMMIT_OR_REVERT
, so one approach is to do the update after the focus listener has concluded. A continuation works nicely, as shown below.