Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I'm trying to create a menu using a treeView. This is the first time I'm using treeView and have been reading up on it on several websites.

I'm having some problems when it comes to action event. What I want to do is basically to fire and event when ever the user clicks a node in the treeview so far I have the following:

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

Sadly this doesn't seem to work.

Is there any way I can add a clicklistener or even an actionlistener to the individual items in my treeView without changing the treeItems to type Button ?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
287 views
Welcome To Ask or Share your Answers For Others

1 Answer

This may be solved by implementing CellFactory, but I think the easiest way is like this:

1) Create and add an event handler to the TreeView:

EventHandler<MouseEvent> mouseEventHandle = (MouseEvent event) -> {
    handleMouseClicked(event);
};

treeView.addEventHandler(MouseEvent.MOUSE_CLICKED, mouseEventHandle); 

2) Handle only clicks on the nodes (and not on empy space os the TreeView):

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...