将焦点设置在ControlsFX中的PropertySheet项目节点上

时间:2016-04-23 17:21:52

标签: java javafx controlsfx propertysheet

我想在ControlsFX中将焦点设置在PropertySheet.Item节点(例如TextField)上。 PropertySheet项具有唯一的名称,因此我可以找到代码为PropertySheet.Item的{​​{1}}。但是没有API来获取与属性项对应的propertySheet.getItems().get(i).getName()。我看到的唯一解决方案是使用方法Node walk scene graph。但是当我用这种方法遍历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]'' TextField。有可能吗?谢谢。

1 个答案:

答案 0 :(得分: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;
    });

在此之后,您可以将属性Node聚焦于:

nodes.get(propertyName).requestFocus();