2012-11-28 25 views
4

我想要使用答案中建議的解決方案: Prevent an accordion in JavaFX from collapsing 爲了防止JavaFX中的Accordion完全崩潰。使用Platform.runLater禁用摺疊JavaFX中的Accordion

我的問題是:爲什麼監聽器在expandedPaneProperty上添加使用Platform.runLater來調用setCollapsible(false)?

事實上,如果我刪除Platform.runLater,摺疊/展開窗格後,由於某種原因,它們的內容會消失。那麼爲什麼runLater解決這個問題呢?

+0

http://stackoverflow.com/users/1155209/jewelsea 你能幫助回答嗎? – user1859872

回答

1

的ChangeListener < T>態的documentation,即:

通常是被認爲是不好的實踐中這個方法來修改觀測值。

如果這種方法是指:

void changed(ObservableValue<? extends T> observable, T oldValue, T newValue); 

RunLater保證,該窗格將在JavaFX應用程序線程的下一個運行中modiffied等進行修改時,它是安全地做他們。

+0

如果在ChangeListener中我們正在修改expandedPaneProperty的值,那麼您所說的將適用於此處,但情況並非如此。在這裏,我們只是將collapsibleProperty設置爲expandedPaneProperty的相同值 – user1859872

+0

在更改expandedPane的任何屬性時 - 您將使其無效。 – drzymala

+0

這不是事實。我認爲你在將「改變價值」與「修改相同價值實例」混爲一談。如果更改expandedPane的屬性,則不會更改其「值」,因此添加到expandedPane的Change/InvalidationListeners將不會收到通知。 – user1859872