use*_*830 2 checkbox treeview javafx contextmenu
在教程http://docs.oracle.com/javafx/2/ui_controls/tree-view.htm中,它解释了如何使用ContextMenu或CheckBox创建TreeView.
但有可能同时拥有它们吗?
当我第一次复制粘贴代码时,我了解到我只能有一个setCellFactory,因为它们会相互覆盖.
// the following two setCellFactory are copied from the tutorial
// this create TreeCell with ContextMenu
treeView.setCellFactory(new Callback<TreeView<String>,TreeCell<String>>(){
@Override
public TreeCell<String> call(TreeView<String> p) {
return new TextFieldTreeCellImpl();
//the class TextFieldTreeCellImp is a TreeCell with ContextMenu
}
});
// this create TreeCell with CheckBox
tree.setCellFactory(CheckBoxTreeCell.<String>forTreeView());
Run Code Online (Sandbox Code Playgroud)
然后我尝试用CheckBoxTreeCell替换TreeCell
//class TextFieldTreeCellImpl extends TreeCell<String> {
class TextFieldTreeCellImpl extends CheckBoxTreeCell<String> {
...
//TreeItem newTag = new TreeItem<String>("New tag");
CheckBoxTreeItem newTag = new CheckBoxTreeItem<String>("New tag");
Run Code Online (Sandbox Code Playgroud)
但是没有出现复选框.它仍然是一个正常的树视图.
我想以最快的方式获得TreeView与CheckBoxes和ContextMenu被加入ContextMenu工厂回调中:
treeView.setCellFactory(new Callback<TreeView<String>,TreeCell<String>>() {
@Override
public TreeCell<String> call(TreeView<String> param) {
TreeCell<String> cell = CheckBoxTreeCell.<String>forTreeView().call(param);
ContextMenu menu = new ContextMenu();
MenuItem item1 = new MenuItem("Item 1");
MenuItem item2 = new MenuItem("Item 2");
EventHandler<ActionEvent> eh = new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Item '" + event.getSource() +
"' of cell '" + cell + "' was clicked.");
}
};
item1.setOnAction(eh);
item2.setOnAction(eh);
menu.getItems().add(item1);
menu.getItems().add(item2);
cell.setContextMenu(menu);
return cell;
}
});
Run Code Online (Sandbox Code Playgroud)
我打电话给通常的TreeCell工厂CheckBoxes.但是,在返回单元格之前,我添加了ContextMenu.
使用EventHandler,您可以指定相应项目的单击行为.
如果您还有其他问题,或者这不是您满意的解决方案,请随时与我联系.
| 归档时间: |
|
| 查看次数: |
1110 次 |
| 最近记录: |