簡體   English   中英

JFormattedTextField和PropertyChangeListener event.getOldValue()和event.getNewValue()返回null

[英]JFormattedTextField and PropertyChangeListener event.getOldValue() and event.getNewValue() returning null

就像標題所示,我在JFormattedTextField上具有以下偵聽器:

myFormattedTextField.addPropertyChangeListener("value", new PropertyChangeListener()
{
  @Override
  public void propertyChange(PropertyChangeEvent evt)
  {
    System.out.println("Old value: " + evt.getOldValue());
    System.out.println("New value: " + evt.getNewValue());
  }
});

這對於getOldValue()和getNewValue()總是輸出null。 如果刪除“ value”字符串作為參數,我什至會得到更奇怪的結果,例如textField所在的JPanel或true / false值。

我在這里到底想念什么?

我在這里到底想念什么?

很難根據您的代碼片段確切地說明問題所在。 但是請注意, JFormattedTextField組件可與AbstractFormatterFactoryAbstractFormatter一起使用,以便能夠將String表示形式轉換為Object值,反之亦然。

如果按以下方式初始化格式化的文本字段,那么formatter和formatter factory都將為null並且永遠都不會轉換任何值:因此,它將始終為null

JFormattedTextField textField = new JFormattedTextField(); // default empty constructor

如果是這種情況,那么您會對發生的事情有一個解釋。 如果看一下JFormattedTextfield類的構造函數,除了空的構造函數外,所有這些構造函數都將使用有助於組件初始化格式化程序和格式化程序工廠的參數。

為了更好的理解,請查看如何使用帶格式的文本字段教程。

邊注

您在評論中說:

我沒有使用NumberFormatter。 由於文本字段可以以空白開頭。

如果您希望文本字段在開始時為空白,則沒有關系:只需不為文本字段設置任何值,而讓用戶對其進行更改(當然,初始值將為null )。 但是您絕對需要設置一個格式化程序。

如果您使用NumberFormatter則可以解決您的問題:

numberFormatter.setCommitsOnValidEdit(true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM