2011-09-07 56 views
3

我有一個在SwiXml xml中定義的對話框,該對話框與對話框的相應bean上的屬性綁定。更新Swixml2中的綁定

: 
<label text="Project Files Location"/> 
<textfield id="tfProjectLocation" bindWith="projectLocation"/> 
<button label="Browse" action="actionBrowse"/> 
: 

當我更新bean中的屬性值(例如使用動作)時,UI不會更新新值。

+1

你可以驗證'Action','actionBrowse',是否已經用Browse按鈕註冊了嗎? – trashgod

+0

actionBrowse正在被調用。它創建一個FileChooser對話框,該對話框返回分配給屬性projectLocation的路徑。單步執行代碼我可以看到projectLocation更改爲新值,但文本字段沒有更新以反映它。 – Fergal

+0

所以'bindWith'應該會發生? – trashgod

回答

2

想通了。我需要發送一個PropertyChangEvent到該bean上的PropertyChangeListener

projectLocation = fc.getSelectedFile().getPath(); 
PropertyChangeEvent pce = new PropertyChangeEvent(this, 
    "projectLocation", projectLocation, fc.getSelectedFile().getPath()); 
PropertyChangeListener[] p = getPropertyChangeListeners(); 
p[0].propertyChange(pce); 
+0

+1好答案。 – trashgod

2

1)Swing是單線程的所有更改都必須在美國東部時間(EventDispaschThread)來完成,

2)如果要更新UI, - 如果不存在EDT, - 從後臺更新camings任務 - 沒有任何來自Listeners活動(尤其是從ActionListenerAction

a)您必須包裝成的invokeLater()

b)不知道,但大多數方法應該是UI /看&感覺相當,那麼你必須撥打SwingUtilities.updateComponentTreeUITop-Level Container's Name);