0

我想将焦点放在ControlsFX 中的PropertySheet.Item节点(例如)上。TextFieldPropertySheet Item 有唯一的名称,所以我可以PropertySheet.Item用代码找到propertySheet.getItems().get(i).getName()。但是没有API可以获取Node对应于属性项的API。我看到的唯一解决方案是使用方法行走场景图getChildrenUnmodifiable。但是当我用这个方法遍历它时PropertySheet,它会返回:

PropertySheet@1ab0e7e0[styleClass=property-sheet]
BorderPane@46e1b462
ToolBar@93ba99a[styleClass=tool-bar]
SegmentedButton@d5c968[styleClass=segmented-button]
HBox@1c3283db
ToggleButton@2fffaccc[styleClass=toggle-button left-pill]''

我没有得到任何属性表节点,例如TextFieldor ComboBox。有可能做到吗?谢谢你。

4

1 回答 1

0

我找到了解决方案。您必须使用setPropertyEditorFactory将存储所有节点的全局 hashmap 变量,以便您以后可以访问它。下面的示例代码。

public Map<String, Node> nodes = new HashMap<>();

    SimpleObjectProperty<Callback<PropertySheet.Item, PropertyEditor<?>>> propertyEditorFactory = 
new SimpleObjectProperty<>(this, "propertyEditor", new DefaultPropertyEditorFactory());

    propertySheet.setPropertyEditorFactory((PropertySheet.Item param) -> {
       PropertyEditor node = propertyEditorFactory.get().call(param);
       nodes.put(uniquePropertyName, node.getEditor());
       return node;
    });

在此之后,您可以将属性节点集中在:

nodes.get(propertyName).requestFocus();
于 2016-04-24T06:17:39.247 回答