[英]Don't know how to fix my PropertyChangeListener on a JFormattedTextField
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
,它會拋出該錯誤。
但是每次將我的evt.getNewValue()
parsing
為 double 的嘗試都沒有奏效。 也許對我試圖用這個程序做的事情有一點了解會有所幫助。
所以我有一個JPanel
(在tabbedPane
),它有兩個JFormattedTextField
輸入。 這是一個轉換應用程序。 我的轉換class method
傳入一個double
並返回一個double
。 我希望將字段鏈接在一起,或者換句話說,只要一個字段的輸入發生更改,其他字段也會隨之更改(因為它是轉換的輸出)。
我正在考慮取消PropertyChangListener
並改用DocumentListener
,但選擇先嘗試前者,因為后者有 3 個我必須處理的可overrideable
methods
,其中一個可能會導致一些意外結果(突出顯示和刪除該字段會觸發例如兩個events
)。
有沒有更好的方法來獲得動態更新的雙輸入字段應用程序? 在一個字段中輸入一個數字,另一個字段的數字會自動更新。
仍然是 Java 的新手。
我找到了一個臨時解決方案:將DecimalFormat
作為JFormattedTextField
的格式。 但如果它也可以在沒有小數的情況下工作,我會喜歡它。
問題已回答,沒有意識到evt.getNewValue()
正在返回一個Number
實例。
您所知道的只是evt.getNewValue()
返回的對象是一個Number
對象。 如果您利用這些信息來發揮自己的優勢,並按照以下方式進行嘗試會怎樣:
temp = ((Number)evt.getNewValue()).doubleValue();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.