JTree: how to get the text of selected item?
Asked Answered
A

3

13

How can I get the text of selected item in a JTree?

Addax answered 21/11, 2010 at 20:10 Comment(0)
M
25

From Java tutorial website on JTree:

//Where the tree is initialized:
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);

//Listen for when the selection changes.
tree.addTreeSelectionListener(this);

public void valueChanged(TreeSelectionEvent e) {
    //Returns the last path element of the selection.
    //This method is useful only when the selection model allows a single selection.
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();

    if (node == null)
    //Nothing is selected.  
    return;

    Object nodeInfo = node.getUserObject();

    if (node.isLeaf()) {
        BookInfo book = (BookInfo) nodeInfo;
        displayURL(book.bookURL);
    } else {
        displayURL(helpURL);
    }

}
Margy answered 21/11, 2010 at 20:22 Comment(3)
I've used: DefaultMutableTreeNode node = (DefaultMutableTreeNode) mytree.getLastSelectedPathComponent(); node.toString();Addax
If this is the first click in the tree there is no last path, and thus you will get a NullPointer.Shedd
@Shedd Are you sure? It works for me on the first click. docs.oracle.com/javase/8/docs/api/javax/swing/… says Returns the last path component of the selected path. It does not say "get the path that was selected previously."Ronnie
C
4
DefaultMutableTreeNode selectedElement 
   =(DefaultMutableTreeNode)tree.getSelectionPath().getLastPathComponent();
.....
System.out.println(selectedElement.getUserObject()); 

//For multiple selection you can use
TreePath[] treePaths = tree.getSelectionModel().getSelectionPaths();
for (TreePath treePath : treePaths) {
     DefaultMutableTreeNode selectedElement = (DefaultMutableTreeNode)treePath.getLastPathComponent();
     Object userObject = selectedElement.getUserObject(); //Do what you want with selected element's user object
}
Contrite answered 8/4, 2013 at 13:4 Comment(1)
This code works good for the single selection what about multiple selection. I am using Discontiguous tree selection and for it, this solution does not work. Any idea? Link?Islamize
A
0
DefaultMutableTreeNode newchild=new DefaultMutableTreeNode(textField.getText());
DefaultMutableTreeNode SelectedNode=       (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
DefaultTreeModel treemodel=(DefaultTreeModel) tree.getModel();
JOptionPane.showMessageDialog(null, SelectedNode.getUserObject().toString());
if(SelectedNode!=null)
   treemodel.insertNodeInto(newchild, SelectedNode, SelectedNode.getChildCount());
Absorptance answered 5/2, 2013 at 19:2 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.