1

私は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() 関数で変更した場合ではありません...おそらくイベントを消費しますが、これがどのようなイベントになるかわかりません。

前もって感謝します!!!

4

3 に答える 3

8

リスナーを一時的に削除して、再度追加できます。

guiPageList.getSelectionModel().selectedItemProperty().removeListener(pageItemSelected);
guiPageList.setValue(model.getCurrentTargetPage());
guiPageList.getSelectionModel().selectedItemProperty().addListener(pageItemSelected);
于 2012-09-25T10:24:50.423 に答える
7

または、リスナーを別のリスナー実装で装飾することもできます。コードは次のようになります。

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

ブロックブール値のセッターを追加し、コンストラクターを介してリスナーを送信します。イベントを停止するには、blockをtrueに設定します。

于 2012-09-25T12:38:44.903 に答える