用例:我正在尝试提供一种功能,用户将元素组合/组合成最终解决方案。元素会有版本。为此,我需要CheckBoxes的组合来定义要包含的元素,然后单击Radio Buttons(嵌套在每个复选框下)以定义应该为所选元素使用的版本。
我目前正在使用来自ControlsFX的CheckTreeView控件。但我无法找到一种方法将RadioButtonMenuItems作为CheckBoxTreeItem的子项放在树中。有没有办法将CheckBoxTreeItem更改为RadioButton?
我目前的解决方案是我正在为所有树节点使用CheckBoxItems,但那些用于定义版本的节点就像单选按钮 - 选择一个将取消选择其余节点。
有关如何处理此事的任何想法?
编辑:在此处发布了新问题+代码here
答案 0 :(得分:1)
对于初学者,您需要创建自己的自定义TreeCellFactory,根据需要显示复选框或单选按钮。类似的东西:
public class TreeCellFactory implements Callback<TreeView<Object>,TreeCell<Object>>
{
@Override
public TreeCell call( TreeView param )
{
return new TreeCell<Object>()
{
private final CheckBox check = new CheckBox();
private final RadioButton radio = new RadioButton();
private Property<Boolean> prevRadioProp;
{
setContentDisplay( ContentDisplay.GRAPHIC_ONLY );
}
@Override
public void updateItem( Object item, boolean empty )
{
if ( prevRadioProp != null )
{
radio.selectedProperty().unbindBidirectional( prevRadioProp );
prevRadioProp = null;
}
check.selectedProperty().unbind();
if ( ! empty && item != null )
{
Property<Boolean> selectedProp = ....;
if ( getTreeItem().isLeaf() ) // display radio button
{
radio.setText( ... );
radio.selectedProperty().bindBidirectional( selectedProp );
prevRadioProp = selectedProp;
setGraphic( radio );
}
else // display checkbox
{
check.setText( ... );
check.selectedProperty().bind( selectedProp );
setGraphic( check );
}
}
else
{
setGraphic( null );
setText( null );
}
}
};
}
}