gpt4 book ai didi

java - 不知道如何在 JFormattedTextField 上修复我的 PropertyChangeListener

转载 作者:行者123 更新时间:2023-11-30 09:09:55 25 4
gpt4 key购买 nike

在文章末尾编辑

测试代码和输出

import java.awt.EventQueue;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.text.NumberFormat;
import javax.swing.JFormattedTextField;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.text.NumberFormatter;

public class Test{
private JFormattedTextField input, input2;
private NumberFormatter formatter;
private PropertyChangeListener listener;


public Test(){
formatter = new NumberFormatter(NumberFormat.getNumberInstance());
input = new JFormattedTextField(formatter);
input2 = new JFormattedTextField(formatter);
listener = new PropertyChangeListener(){
@Override
public void propertyChange(PropertyChangeEvent evt) {
convert(evt);
}
};
input.setColumns(4);
input2.setColumns(4);
input.addPropertyChangeListener("value", listener);
input2.addPropertyChangeListener("value", listener);
input.setValue(0.0);
JPanel panel = new JPanel();
panel.add(input);
panel.add(input2);


JOptionPane.showMessageDialog(null, panel);
}

private void convert(PropertyChangeEvent evt){
if (evt.getSource()== input){
if (evt.getSource()!= null){
double temp;
temp = converter((Double)evt.getNewValue());
input2.setValue(temp);
}

}


}

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;
}

}

堆栈跟踪:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double
at test.Test.convert(Test.java:46)

我的想法

因为我有一个传入 double 的方法(它是 convert() ),而且看似 evt.getNewValue()返回直接值,在输入时技术上是 long ,它会抛出该错误。

但是每次尝试parsing我的evt.getNewValue()加倍没有用。也许稍微了解一下我正在尝试使用该程序做什么会有所帮助。


这个程序是做什么用的

所以我有一个 JPanel (在 tabbedPane 中)有两个 JFormattedTextField输入。这是一个转换应用程序。我的转换class method传入 double并返回 double .我希望将这些字段链接在一起,或者换句话说,一旦一个字段的输入发生变化,另一个字段的输入也会随之发生变化(因为它是转换的输出)。

我正在考虑废弃 PropertyChangListener并寻求DocumentListener相反,但选择先尝试前者,因为后者有 3 overrideable methods我必须注意,其中一个可能会导致一些意外结果(例如,突出显示和删除该字段会触发两个 events)。


长话短说:

是否有更好的方法来获得动态更新的双输入字段应用程序?在一个字段中输入一个数字,另一字段的数字会自动更新。

还是 Java 的新手。


编辑1

我找到了一个临时解决方案:有一个 DecimalFormat作为 JFormattedTextField 中的格式.但是,如果它也可以在没有小数的情况下工作,我会喜欢它。

编辑2

问题已回答,没意识到evt.getNewValue()正在返回 Number实例。

最佳答案

您可以确定的是,evt.getNewValue() 返回的对象是一个Number 对象。如果您利用这些信息来发挥自己的优势并按照以下方式尝试一些事情会怎样:

temp = ((Number)evt.getNewValue()).doubleValue();

关于java - 不知道如何在 JFormattedTextField 上修复我的 PropertyChangeListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22776172/

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