Java Don';我不知道如何在JFormattedTextField上修复我的PropertyChangeListener 在文章末尾编辑 测试代码和输出
堆栈跟踪:Java Don';我不知道如何在JFormattedTextField上修复我的PropertyChangeListener 在文章末尾编辑 测试代码和输出,java,swing,listener,jformattedtextfield,propertychangelistener,Java,Swing,Listener,Jformattedtextfield,Propertychangelistener,堆栈跟踪: 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()返回直接值,在输入时
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()
返回直接值,在输入时它在技术上是一个长的,所以它抛出了那个错误
但是每次尝试将我的evt.getNewValue()
解析为double都没有成功。也许我对这个项目的一些了解会有所帮助
这个节目的目的是什么
所以我有一个JPanel
(在选项卡窗格中
),它有两个JFormattedTextField
输入。这是一个转换应用程序。我的转换类方法
传入一个double
并返回一个double
。我希望将这些字段链接在一起,或者换句话说,一个字段的输入被更改,另一个字段也随之更改(例如转换的输出)
我曾考虑放弃属性ChangListener
,转而选择DocumentListener
,但选择先尝试前者,因为后者有3个可重写的方法
我必须处理,其中一个可能会导致一些意外的结果(例如,突出显示和删除该字段将触发两个事件)
TL;DR:
是否有更好的方法获得动态更新的双输入字段应用程序?在一个字段中输入一个数字,另一个字段的数字自动更新
还是Java的新手
编辑1
我找到了一个临时解决方案:在JFormattedTextField
中使用DecimalFormat
作为格式。但是如果它可以在没有小数点的情况下工作,我会喜欢它
编辑2
回答的问题是,没有意识到evt.getNewValue()
返回的是一个Number
实例。您可以肯定的是evt.getNewValue()
返回的对象是一个Number
对象。如果您利用该信息并尝试以下方法会怎么样:
temp = ((Number)evt.getNewValue()).doubleValue();
亲爱的,你是我的救世主。谢谢你,只要我被允许,你就会标记为已回答。一旦一个字段的输入被更改,其他字段也随之更改。
-只有在格式化文本字段上提交更改时,才会触发PropertyChangeListener。因此,DocumentListener将是更好的选择,因此更改将以y的形式发生ou类型。多个事件不是一个issue@camickr我也正要问这个问题。现在它实际上是即时更新的,但只在第一个焦点和我添加数字的情况下更新。否则我必须在该字段上失去焦点,它才能更新另一个字段。我要尝试一个文档侦听器,谢谢。@camickr好的,所以我尝试了使用文档监听器。它只会在失去焦点的情况下更新,所以这更不是我想要的。我会摆弄它看看我是否能解决这个问题。文档监听器可以处理我键入的每个字符。你只需要处理insertUpdate()
和removeUpdate()
事件。changeEvent()
用于不适用于文本字段的属性更改。@camickr它可以工作,但只有在我从文本字段更改焦点时才能工作。我不知道为什么,我让oracles演示文档侦听器完全按照我希望的程序工作,但我的程序不会这样做。
temp = ((Number)evt.getNewValue()).doubleValue();