JavaFX:为节点创建自定义数据属性

4

我目前需要自定义属性,可以随时获取。是否有一种方法可以为节点创建自定义数据属性,然后在JavaFX中获取这些值?

假设我有以下的按钮。

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

类似于:https://developer.mozilla.org/de/docs/Web/Guide/HTML/Using_data_attributes 现在在HTML中,我可以简单地这样做:
<div id="example" data-foobar="I hold some value"></div>

然后我可以轻松地像这样获取数据:
document.getElementById("example").dataset.foobar;

编辑:我需要为一个节点提供多个数据属性,因为一个节点可以包含各种信息。


使用userData怎么样? - Vladlen Gladis
我们可以有多个用户数据吗? - Asperger
2个回答

9
数据可以存储在 Nodeproperties ObservableMap 中。
Node node = ...
node.getProperties().put("foo", "bar");
...
Object foo = node.getProperties().get("foo");

请注意,有些布局属性也使用了这个映射表,因此不应该使用类似于javafx属性或“静态”属性的属性名称作为关键字。为确保正确性,您可以创建一个自定义关键字类,在 equals 方法中如果传递的参数对象不是同一类型,则返回false。请注意保留HTML标记。

看起来是个更好的答案。已接受。 - Asperger

4
为了解决您的问题,您应该使用 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();

基本上我可以使用哈希表或一些关联数组来完成这个任务,对吗? - Asperger
那么键将是属性名称,而值则是我的属性所持有的值。 - Asperger
是的,您可以存储任何您想要的对象。 - Vladlen Gladis
我得说,这份文档真的很糟糕,你不觉得吗?我会接受你的答案(需要等几分钟)。 - Asperger
1
我真的做了:如何在JavaFX中创建自定义属性。自定义FXML属性JavaFX。数据属性JavaFX。哈哈,我找不到任何与setUserData有关的东西 xD。我肯定做错了什么呵呵。 - Asperger
@Asperger 刚刚阅读了API文档。所有方法都在那里列出。 - James_D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接