2016-04-23 109 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();