2012-09-25 18 views
1

我有一個javafx的小問題。我添加了一個變化監聽器是這樣的:javafx - 如何禁用不是來自用戶的事件觸發

private final ChangeListener<String> pageItemSelected = new ChangeListener<String>() 
{ 
@Override 
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue){ 
    pageGotSelected(newValue); 
} 
}; 

現在的問題:如果我改變了頁面的項目是這樣的:

guiPageList.setValue(model.getCurrentTargetPage()); 

得也(因爲它通過用鼠標選擇一些得到事件或鑰匙)被解僱。有沒有辦法禁用事件觸發或其他方式? 我只需要事件,如果元素被用戶選中,而不是如果我用setValue()函數改變它... 也許消耗事件,但我不知道這將是什麼樣的事件。

在此先感謝!

+0

如何將pageItemSelected添加到偵聽器? –

+0

您的意思是: guiPageList.getSelectionModel()。selectedItemProperty()。addListener(pageItemSelected); ? – immerhart

回答

7

您可以暫時刪除監聽器,並再次添加:

guiPageList.getSelectionModel().selectedItemProperty().removeListener(pageItemSelected); 
guiPageList.setValue(model.getCurrentTargetPage()); 
guiPageList.getSelectionModel().selectedItemProperty().addListener(pageItemSelected); 
+0

我爲什麼不提出這個想法? 非常感謝你! – immerhart

4

或者你可以裝飾與另一個監聽器實現監聽,代碼將是這樣的:

class InvalidationListenerEventBlocker implements InvalidationListener { 
    InvalidationListener decoratedListener; 
    boolean block; 
    public void invalidated(Observable observable) { 
     if(!block) { 
      decoratedListener.invalidated(observable); 
     } 
    } 
} 

添加一個setter對於塊布爾值並通過構造函數發送偵聽器。將塊設置爲true以停止事件。

相關問題