首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javafx Treeview项目操作事件

Javafx Treeview项目操作事件
EN

Stack Overflow用户
提问于 2013-04-03 23:52:40
回答 5查看 27.2K关注 0票数 4

我正在尝试使用treeView创建菜单。这是我第一次使用treeView,并且已经在几个网站上阅读了它。

当涉及到动作事件时,我遇到了一些问题。我想要做的基本上是在用户单击树形视图中的节点时触发和事件,到目前为止,我有以下内容:

代码语言:javascript
运行
复制
        TreeItem<String> rootItem = new TreeItem<String>("Navigation");
    TreeItem<String> statistics = new TreeItem<String>("Statistics");
    TreeItem<String> clan = new TreeItem<String>("Clan page");
    clan.addEventHandler(MouseEvent, new EventHandler<MouseEvent>() {

        @Override
        public void handle(MouseEvent event) {
            // TODO Auto-generated method stub

        }
    });

    rootItem.getChildren().add(statistics);
    rootItem.getChildren().add(clan);

    TreeView<String> tree = new TreeView<String>(rootItem); 

遗憾的是,这似乎不起作用。

有没有什么方法可以将clicklistener甚至actionlistener添加到我的treeView中的各个项目中,而无需将treeItems更改为Button类型?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-04 03:35:02

根据JavaFX 2.2 documentation的说法:

“..a TreeItem is not a Node,因此不会在TreeItem上触发任何可视事件,要获取这些事件,需要向TreeCell实例添加相关的观察者(通过自定义单元工厂)。”

我认为这篇关于使用TreeViewexample在某种程度上会很有用。

票数 5
EN

Stack Overflow用户

发布于 2014-11-03 21:00:27

这可以通过实现CellFactory来解决,但我认为最简单的方法是这样:

1)创建事件处理程序并添加到TreeView中:

代码语言:javascript
运行
复制
EventHandler<MouseEvent> mouseEventHandle = (MouseEvent event) -> {
    handleMouseClicked(event);
};

treeView.addEventHandler(MouseEvent.MOUSE_CLICKED, mouseEventHandle); 

2)句柄只在节点上点击(而不是在TreeView的空白处):

代码语言:javascript
运行
复制
private void handleMouseClicked(MouseEvent event) {
    Node node = event.getPickResult().getIntersectedNode();
    // Accept clicks only on node cells, and not on empty spaces of the TreeView
    if (node instanceof Text || (node instanceof TreeCell && ((TreeCell) node).getText() != null)) {
        String name = (String) ((TreeItem)treeView.getSelectionModel().getSelectedItem()).getValue();
        System.out.println("Node click: " + name);
    }
}
票数 14
EN

Stack Overflow用户

发布于 2015-07-05 23:10:26

我在鼠标事件中找不到方法getPickResult,所以也许next比Alex的答案更可取:

1)向树形视图添加监听器

代码语言:javascript
运行
复制
treeView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> handle(newValue));

2)处理点击,不需要区分空格和节点上的点击

代码语言:javascript
运行
复制
private void updateSelectedItem(Object newValue) {      
    System.out.println(newValue);
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15792090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档