我对javafx有点问题.我添加了一个像这样的更改监听器:
private final ChangeListener<String> pageItemSelected = new ChangeListener<String>()
{
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue){
pageGotSelected(newValue);
}
};
Run Code Online (Sandbox Code Playgroud)
现在问题:如果我更改这样的页面项:
guiPageList.setValue(model.getCurrentTargetPage());
Run Code Online (Sandbox Code Playgroud)
触发事件(通过用鼠标或键选择某些东西)也会被触发.有没有办法禁用事件发射或其他方式?我只需要事件,如果元素是由用户选择的,而不是我用setValue()函数改变它...也许消耗事件,但我不知道这将是什么样的事件.
提前致谢!!!
您可以暂时删除侦听器并再次添加:
guiPageList.getSelectionModel().selectedItemProperty().removeListener(pageItemSelected);
guiPageList.setValue(model.getCurrentTargetPage());
guiPageList.getSelectionModel().selectedItemProperty().addListener(pageItemSelected);
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用另一个侦听器实现来修饰侦听器,代码类似于:
class InvalidationListenerEventBlocker implements InvalidationListener {
InvalidationListener decoratedListener;
boolean block;
public void invalidated(Observable observable) {
if(!block) {
decoratedListener.invalidated(observable);
}
}
}
Run Code Online (Sandbox Code Playgroud)
为块boolean添加一个setter,并通过构造函数发送监听器.将block设置为true以停止事件.
| 归档时间: |
|
| 查看次数: |
7362 次 |
| 最近记录: |