1

userDataそのような要素が。を介してトリガーされたときに要素のを取得しようとしていListenerます。ObservableValue基本的に、のインスタンスでは、の「所有者」への参照を取得しますChangeListener

私はこれが例を通してよりよく示されることができると思います:

for(/*something*/) {
    CheckBox newBox = new CheckBox("My Label " + i);
    newBox.setSelected(true);
    newBox.setUserData(object);  //setting this object to access later
    newBox.selectedProperty().addListener(new ChangeListener<Boolean>() {
        public void changed(ObservableValue<? extends Boolean> ov, Boolean old_val, Boolean new_val) {
            //Here I would like to call something to get the UserData 
            //I have just set.  I would need to access "object" set above.
        }
    });
}

私はそうする方法を見つけていません。現時点では、このチェックボックスのを設定し、そのIDを使用して必要なアイテムを見つけることができますが、これは、このノードにidオブジェクト()を設定できるという事実に反しているようです。userDataこれはどのようuserDataに使用されるのかではありませんか?

4

3 に答える 3

1

次のキーワードを使用しますfinal

final CheckBox newBox = new CheckBox("My Label " + i);

次に、次を使用してアクセスします。

newBox.getUserData()
于 2013-02-27T19:08:46.207 に答える
0

と の配列がCheckBoxesありTextFields、すべて同じリスナーを使用userDataしています。

cb.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(final ActionEvent event) {
        final CheckBox source = (CheckBox) event.getSource();
        System.out.println(source.getUserData());
        }
    });
于 2015-12-31T19:53:06.727 に答える
0

これが私がこの問題に対して見つけた解決策です(私が最初に求めていたことが不可能であると仮定して)。

ChangeListenerこの機能を実装した実装を作成することになりました。これListenerは次のようになります。

public class ChangeListenerWithData implements ChangeListener<Boolean> {

    private Object userData;

    public ChangeListenerWithData(Node node) {
        userData = node.getUserData();
    }

    public Object getUserData() {
        return userData;
    }

    public void setUserData(Object userData) {
        this.userData = userData;
    }

    @Override
    public void changed(ObservableValue<? extends Boolean> observable,
            Boolean oldValue, Boolean newValue) {
        // TODO Auto-generated method stub

    }

}

私のコードは次のようになりました:

for(/*something*/) {
    CheckBox newBox = new CheckBox("My Label " + i);
    newBox.setSelected(true);
    newBox.setUserData(object);  //setting this object to access later
    newBox.selectedProperty().addListener(new ChangeListenerWithData(newBox) {
        public void changed(ObservableValue<? extends Boolean> ov, Boolean old_val, Boolean new_val) {
            //accessing user data
            context.getMyMap().get(this.getUserData().toString());
        }
    });
}

私は常により良い解決策を受け入れていますが、それまでの間、これが誰かにも役立つことを願っています!

于 2013-02-27T19:12:23.907 に答える