2016-10-03 9 views
2

現在、いつでも取得できるカスタム属性が必要です。ノードのカスタムデータ属性を作成し、その値をjavafxで取得する方法はありますか?JavaFX:ノードのカスタムデータ属性を作成する

私は以下のボタンを持っていると仮定します。同様に

<Button text="Im a button" fooBar="I hold some value" /> 

:HTMLで今https://developer.mozilla.org/de/docs/Web/Guide/HTML/Using_data_attributes

私は単純に次のようんでした:

<div id="example" data-foobar="I hold some value"></div> 

それから私は、簡単にこのようなデータを得ることができます:

document.getElementById("example").dataset.foobar; 

編集:私は1つ以上のデータプロパティfが必要ですノードは様々な情報を保持することができるので、

+0

'userData'の使用はどうですか? – GVArt

+0

@GVArt userData? – Asperger

+0

複数のユーザーデータを使用できますか? – Asperger

答えて

3

データはthe propertiesObservableMap of a Node

に保存することができます
Node node = ... 
node.getProperties().put("foo", "bar"); 
... 
Object foo = node.getProperties().get("foo"); 

ただし、一部のレイアウトプロパティでもこのマップが使用されるため、 javafxのプロパティー/ "静的な"プロパティーをキ​​ーとして使用する必要があります。別の型のオブジェクトがパラメータとしてequalsに渡された場合、trueを返さないカスタムキークラスを作成できることを確認してください。

+0

より良い答えのように見えます。受け入れられた – Asperger

2

問題を解決するには、userDataを使用する必要があります。これは、必要なオブジェクトにすることができます。

node.setUserData("Hello world"); 
node2.setUserData(123); 

など

あなたは、配列、リストに値を保存することができ、複数の値を設定する必要がある場合は、JSONなど

ArrayList<String> vals = new ArrayList(); 
vals.add("Hello"); 
vals.add("World"); 
node3.setUserData(vals); 
//some code 
ArrayList<String> result = (ArrayList) node3.getUserData(); 
+0

それでは、基本的にハッシュマップや連想配列でこれを行うことができますか? – Asperger

+0

この場合、キーは属性名になり、値はmy属性の値と同じになります – Asperger

+0

はい、任意のオブジェクトを保存できます。 – GVArt