JTree select Node
Is there any method available to select a node by its path in JTree. I have to pass the argument as string type and see the node gets selected. Help !!!!
well, if you have the node and are using DefaultTreeModel, you can call: getPathToRoot(TreeNode)
Not sure how to find the node from the value except to just loop thru the entire tree... or maintain a separate table of value/node objects.
Similar Messages
-
Jtree Select node and change leafs icon problem
Hi All,
i create a tree and implement a TreeSelectionListener:
my mission is whenever i select a node i need to change the icon of this node (for now.later i will have to find if it have childrens).
import java.awt.Color;
import java.awt.Component;
import java.util.Enumeration;
import java.util.NoSuchElementException;
import java.util.Vector;
import javax.swing.ImageIcon;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
public class TreeView{
DefaultMutableTreeNode top;
JTree tree ;
Color frameColor;
public static ImageIcon NoTSelIcon;
public static ImageIcon SelIcon;
public static String[] name= new String[8];
public TreeView(Color BackColor) {
// TODO Auto-generated constructor stub
top = new DefaultMutableTreeNode("Diagnostics");
this.frameColor=BackColor;
SelIcon = createImageIcon("../Resource/Images/Select.gif");
if (SelIcon == null)
System.err.println("Tutorial icon missing; using default.");
NoTSelIcon = createImageIcon("../Resource/Images/NotSelc.gif");
if (NoTSelIcon == null)
System.err.println("Tutorial icon missing; using default.");
public Component createTreeComponents(){
//Create the nodes.
createNodes(top);
//Create a tree that allows one selection at a time.
tree = new JTree(top);
//TREE LISTENERS
//Treeselction listener
Handler hObject = new Handler();
tree.addTreeSelectionListener(hObject);
//Tree expand/collapse listener
HandlerExpansionListener hObjectExpan = new HandlerExpansionListener();
tree.addTreeExpansionListener(hObjectExpan);
// tree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
//set tree background
tree.setBackground(frameColor);
tree.setCellRenderer(new OverrideTreeCellRenderer(frameColor,SelIcon,NoTSelIcon));
return tree;
private void createNodes(DefaultMutableTreeNode top) {
DefaultMutableTreeNode category = null;
DefaultMutableTreeNode SubCategory = null;
DefaultMutableTreeNode SubCategoryBasee = null;
DefaultMutableTreeNode SubSubCategoryBasee = null;
category = new DefaultMutableTreeNode("Dfe");
top.add(category);
//Sub test visible
SubCategory = new DefaultMutableTreeNode("Test Visible");
category.add(SubCategory);
SubCategory.add(new DefaultMutableTreeNode("Son 1"));
SubCategory.add(new DefaultMutableTreeNode("Son 2"));
SubSubCategoryBasee = new DefaultMutableTreeNode("Test Base");
SubSubCategoryBasee.add(new DefaultMutableTreeNode("Grandson 1"));
SubSubCategoryBasee.add(new DefaultMutableTreeNode("Grandson 2"));
SubCategory.add(SubSubCategoryBasee);
class Handler implements TreeSelectionListener {
public void valueChanged(TreeSelectionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("treeSelect event ");
TreePath trph;
trph=arg0.getNewLeadSelectionPath();
int count=trph.getPathCount();
DefaultMutableTreeNode Selnode = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
String Name = (String)Selnode.getUserObject();
setSelected(Selnode,true);
int number_ofnodes=getNodeCountBelow((TreeModel)tree.getModel() , Selnode, false);
System.out.println("The Number of nodes under "+Name+"="+number_ofnodes);
tree.setCellRenderer(new IconRenderer(SelIcon,NoTSelIcon,frameColor));
class HandlerExpansionListener implements TreeExpansionListener {
public void valueChanged(TreeSelectionEvent arg0) {
// TODO Auto-generated method stub
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
if (node == null) return;
} // The inner class
public void treeCollapsed(TreeExpansionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("treeCollapsed event ");
public void treeExpanded(TreeExpansionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("treeExpanded event ");
/** Returns an ImageIcon, or null if the path was invalid. */
protected static ImageIcon createImageIcon(String path) {
//ImageIcon imcon= new ImageIcon(path);
//return imcon;
java.net.URL imgURL = TreeView.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
DefaultMutableTreeNode newnode;
public void setSelected(DefaultMutableTreeNode Selnode ,boolean isSelected)
Enumeration Enchilds=Selnode.children();//ENUMRATE ALL CHILDS FOR THIS NODE
if (Enchilds != null)
while (Enchilds.hasMoreElements())
newnode=(DefaultMutableTreeNode)Enchilds.nextElement();
String NameSel = (String)newnode.getUserObject();
setSelected(newnode,isSelected);
//GETTING THE TREE DEPTH
public int getNodeCountBelow(TreeModel model, Object node, boolean includeInitialNode)
int n = includeInitialNode ? 1 : 0;
for (int i = 0; i < model.getChildCount(node); i ++)
n += getNodeCountBelow(model, model.getChild(node, i), true);
return n;
import java.awt.Color;
import java.awt.Component;
import java.util.Enumeration;
import java.util.NoSuchElementException;
import javax.swing.Icon;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
public class IconRenderer extends DefaultTreeCellRenderer {
private static final long serialVersionUID = 1L;
Icon SelectedIcon;
Icon NotSelectedIcon;
Color BackgroundColor;
boolean Selected=false;
boolean Leaf=false;
boolean IsItaChild=false;
DefaultMutableTreeNode SelctedNode=null;
public IconRenderer(Icon SelIcon,Icon NoTSelIcon,Color Bacground) {
SelectedIcon = SelIcon;
NotSelectedIcon = NoTSelIcon;
BackgroundColor=Bacground;
setBackgroundNonSelectionColor(BackgroundColor);
public Component getTreeCellRendererComponent(JTree tree,Object value,boolean sel,boolean expanded,
boolean leaf,int row,boolean hasFocus)
super.getTreeCellRendererComponent(tree, value, sel,expanded, leaf, row,hasFocus);
Selected=sel;
Leaf=leaf;
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
String s2 = (String)node.getUserObject();
return this;
}my problem is :
when i select a node the the method "getTreeCellRendererComponent"
start to run on the entire tree from buttom to top and than from top to buttom.
for me it waste of time because if has say 100 nodes it wont botthers me.
but i have 20000 nodes and more its take a time.
and for all this nodes i have to make compares.
is there a way to force the DefaultTreeCellRenderer to not run the entire tree???
ThanksYou need to make sure that your TreeModel interprets your group nodes to be non-leaf nodes (one of the methods in the TreeModel interface is called isLeaf). If you are using a DefaultTreeModel with DefaultMutableTreeNode objects, you can use the askAllowsChildren property of DefaultTreeModel and the allowsChildren property of DefaultMutableTreeNode to control this. See the API for more details:
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/tree/DefaultTreeModel.html
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/tree/DefaultMutableTreeNode.html -
Change icon of a non selected node in JTree
Hello
I have a swing application contening a JTree.
I'd like to know how to change the icon of a non selected node in my tree. I have the information about the node and its path. I try to change userObject information and the icon of the node with the setIcon of (DefaultMutableTreeNode), and reload the node (DefaultTreeModel) but it doesn't work.
Do I have to set the change in my CellRenderer ?
Any advice will be welcome
AnneIf you carefully look at the java tutorial tree, the change is made for all the leaf icon. What I want is to change the icon of a not selected node of my tree while I do other stuff with the other nodes like select, display their contents, drag them ...
the operation of a not selected node is independant from the selection in the tree.
So I still ask how to force a node to reload and take care of the change of his icon.
Anne -
How could i get the selected node in the JTree
getLastSelectedPathComponent() �returns the parent node of currenr selected, so how could I get the selected node itself in the JTree
I will appretiate for any help!i think you can get by....
TreePath treePath = tree.getSelectionPath();
DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) treePath.getLastPathComponent(); -
JTree: How to get the currently selected node
How do I get the currently selected node in JTree?
getLastSelectedPathComponent() this method always return the last selected node and not the current one.
Thanks in advance
SachinUse
TreePath selectedPath = tree.getSelectionPath()If your tree allows multiple selections, use
TreePath [] selectedPaths = tree.getSelectionPaths() this will return an array of all selected tree paths.
Once you get the tree path, call the treePath.getLastPathComponent(). this should tell you the currently selected node.
Hope this helps
Sai Pullabhotla -
JTree and selected node question
Hello
Is it possible to convert the selected node to an int?
I guess I'm looking for something llike this.
int nodeNumber = node.getSelectedIndex();
There is nothing like that in the API, and it would help greatly if I could find a way do this.
Thanks
Have a good holiday
JimFrom the API for JTree
public int getMinSelectionRow()
Gets the first selected row.
Returns:
an integer designating the first selected row, where 0 is the first row in the display
But I think this is based on how many rows are displayed at the present time and might change if the tree is opened above it. -
How to select node in JTree without firing event?
I have got standard situation. JTree in the left panel, and several edit boxes in right panel. Certainly, I have TreeSelectionListener, which on every tree node selection shows corresponding model values in edit boxes.
I'd like to implement next logic:
1. Something was changed in any edit box in right panel. Model has been changed.
2. User clicks on different node in tree.
3. Dialog "Message was not saved. Save?" with Yes/No/Cancel buttons are shown.
Yes/No buttons are easy to handle.
Question is about Cancel. I'd like on Cancel button left all edit boxes in their present state (do not restore values from saved model) and select back node, which wasn't saved.
Problem is next. If I select node by setSelectionPath or smth like that, but... JTree fires event and my listener receives onTreeItemSelected back, which checks that node wasn't saved and ......
Who does have any idea, or have done similar tasks? How can I select node and do not allow tree fire event this time?
Thanks in advance.First, as soon as the model changes (when editing any
combo box) some flag will be set. Now the logic which
updates the combo boxes will do it only on a change of
the current node and (this is new) if the flag wasn't
set. You should have some flag anyway because somehow
you must determine when to show the dialog, shouldn't
you?Yes, I have got this logic implemented. But it's only the half :)
I know exactly when my model has been changed, but if it was changed, i'd like to ask user what to do next - svae/loose changes/cancel
And on cancel i'd like to select last edited tree node and do not get event from tree at that moment.
>
Second way, prevent selecting a new node if that flag
has been set. You could do this by subclassing
DefaultTreeSelectionModel and overriding some methods
(setSelectionPath() et al).Ok. I'll investigate this.
>
MichaelThanks. -
Coloring selected nodes in JTree
i am currently using setCellRenderer() for highlighting a selected node in my JTree.but when i select another node, the previously selected node loses its highlight.i would like to know of how i could make the highlight in the selected nodes remain persistent.
I am currently using DISCONTIGUOUS_TREE_SELECTION only. my requirement is that i should be able to select any number of nodes.so i use this selection.
but at the same time, my highlight in selected nodes should be like a toggle-state.
if i select an already selected node ( say A), the highlight has to go away.
and at the same time, th highlight on previously selected nodes (say B, C) should be persistent.
am currently using TreeSelectionListener. and for rendering am using SetCellRenderer.
in this scenario, how could my work be accomplished? -
JTree get selected node/object values
I wan to get all the selected nodes/objects values that I added to the JTree. How can I do this?
Thanks.TreePath[] paths = tree.getSelectedPath();
for(int i = 0; i < paths.length; i++){
TreeNode node = (TreeNode)paths.getLastPathComponent();
Object mySelectedObject = node.getUserObject();
}Some minor Errors
We have to use array paths[i] instead of paths
The correct code as used by me is
javax.swing.tree.TreePath[] paths = jTree1.getSelectionModel().getSelectionPaths();
for(int i = 0; i < paths.length; i++){
javax.swing.tree.TreeNode node = (javax.swing.tree.TreeNode)paths.getLastPathComponent();
System.out.println(((javax.swing.tree.DefaultMutableTreeNode)node).getUserObject());
CSJakharia -
Setting custom color for selected node in JTree?
Hi,
i want to set my own color for selected node in JTree. i don't want to set for all the nodes...how to set Color for Selected node using TreeCellRender class?
Thanks
ManiI assume you are not setting a custom tree cell renderer...
javax.swing.JTree theTree = ...;
java.awt.Color newBGColor = ...;
((javax.swing.tree.DefaultTreeCellRenderer)theTree.getCellRenderer())
.setBackgroundSelectionColor(newColor); -
JTree, was node already selected?
Is there any means to see if a node was already selected when it is clicked?
Well, don't worry, it's OK for me, I imagined this:
In TreeSelectionListener#valueChanged: save the selected Node with SwingUtilities.invokeLater(..).
In MouseListener#mousePressed(MouseEvent e): compare the saved node with
tree.getClosestPathForLocation(e.getX(), e.getY()).getLastPathComponent();
If equals --> the clicked node was already selected.
Many thanks however to those who were trying to find a solution for me. -
JTree selection problem when using custom renderer and editor
Hello:
I created a JTree with custom renderer and editor.
The customization makes JCheckBox to be the component
responsible for editing and rendering.
The problem is that when I click on the node with the checkbox
the JTree selection model does not get updated.
Without customizations of the editor and renderer the MouseEvent would be fired and BasicTreeUI$MouseHandler.mousePressed() method would call
the selectPathForEvent() method which would be responsible for updating
the selection model. At the same time if I attach a mouse listener to the JTree (customized) I see the events when clicking on the nodes. It seems like the MouseEvent gets lost and somehow as a result of which the selection model does not get updated.
Am I missing something?
Thanks
AlexanderYou probably forgot to call super.getTreeCellRendererComponent(...) at the beginning of your getTreeCellRendererComponent(...) method in your custom renderer.
Or maybe in the getTreeCellEditorComponent(...) of the TreeCellEditor... -
How do I highlight JTree selection ?
Hi,
How do you highlight the selected node in a JTree from code ?
I am deleting a node and want to highlight the preceeding node. I select it via this code :-
jTree.setSelectionPath( newSelectedPath);
jTree.scrollPathToVisible( newSelectedPath);
jTree.repaint();
But that does not highlight the node.
Many thanks in advance,
AaronWith the Move tool selected, this seems to be the only way to enlarge a selection.
What I'd want to do in Joshua's situation though is to draw a marquee around the clips I want to select. The inability to hold down shift or control and draw a second marquee to add more clips to a selection seems like a flaw! Is there a key combination or do I have to always select individual clips (or groups) after the initial selection? -
Refresh JTree keep node x-y position
Hi,
I have a JTree which is the folders of the file system. Over time, new folders added/deleted before/after a selected node, so I need to refresh it. How to keep the selected node at the same x-y location of the view?
I can keep the selected node in the view (visible), but the x-y position may change.
Any information would be appreciated. Thanks in advance.Without seeing any code, tha best I can offer is
-- before refreshing, store the visible rectangle and the location of the selected node
-- after refreshing, obtain the location of the selected node and compute the offset
-- compute the new desired visible rectangle and scrollRectToVisible
To get better help sooner, post a [_SSCCE_|http://mindprod.com/jgloss/sscce.html] that clearly demonstrates your problem.
Use code tags to post codes -- [code]CODE[/code] will display asCODEOr click the CODE button and paste your code between the {code} tags that appear.
db -
Hy,
I have a problem with the treeselectionlistener.
I want to show data from a database using a JTree but the problem is that some nodes have the same name. So the methode
public void valueChanged(TreeSelectionEvent event){
TreePath path = tree.getSelectionPath();
String test = path.getLastPathComponent().toString();
gives a lot of times the same value.
Is there a possibility to identify the selected node like an array that shows the number of the selected node.
Like [2,5,1] this would than mean node 2 of first row node 5 of second row and first node of 3th row?
Thx Metteyou could extend DefaultTreeNode and add a variable which will correspond to Key Field in your table like:
public class MyCustomTreeNode extends DefaultTreeNode {
private int nodeId;
//code if needed
or you could play with TreePath object... more on:
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/tree/TreePath.html
Maybe you are looking for
-
Load Report Failed - Report Application Server Failed error at runtime
Hello, I'm pretty new to Crystal Reports so please bear with me. I just installed CR 2008 on my development box, which is running VS2005 .NET 2.0. I changed over all of my assembly references in my web.config to the new version: <add assembly="Cryst
-
Encounter java.lang.NullPointerException
I encounter java.lang.NullPointerException when I ran my EAM application through Jdeveloper. I did'nt make any changes in vanilla pages. I just want to run application as it is like applications. Here is the error message when I press apply button in
-
I can't find where to update my iOS 5. I have looked under Settings then General, after that there is no where that shows update for this app. I have used it since I received my ipod. Was using AIM and now that doesn't work anymore. Try to downlo
-
Master-detail-detail UDO?
Hi, I'm fairly new to B1 but have a questoin. I've tried to search the fora, but couldn't find a (good) awnser yet..... Is it possible to create a Master-detail-detail UDO?? I want(need) to categorize Items and based on the category/subcategory offer
-
Hello, I'm a student who's just being introduced to java technology, and i have downloaded the latest java sdk, but cannot get it to compile or run any of my programs i get. I've read several forums about class paths and such, but i've tried setting