2016-04-23 96 views
0

我想在ControlsFX中将焦点设置为PropertySheet.Item节点(例如TextField)。 PropertySheet Item有唯一的名称,所以我可以找到PropertySheet.Item代码propertySheet.getItems().get(i).getName()。但是没有API获取Node,这对应于属性项目。我看到的唯一解决方案是walk scene graph与方法getChildrenUnmodifiable。但是,当我穿越PropertySheet用这种方法,它返回:将焦点设置在ControlsFX中的PropertySheet项目节点上

[email protected][styleClass=property-sheet] 
[email protected] 
[email protected][styleClass=tool-bar] 
[email protected][styleClass=segmented-button] 
[email protected] 
[email protected][styleClass=toggle-button left-pill]'' 

我没有得到任何的PropertySheet节点,如TextFieldComboBox。可以做到吗?谢谢。

回答

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();