JTree - Create nodes and expand

Hi there,
I have made a file-tree from the swing jtree, where My Computer is the root, then C:/ etc, Program Files, etc...
The problem I'm having is that I'm trying to open up a node if a link has been clicked. For example.. if A shortcut to C:/Program Files/Pictures/pic.jpg was clicked, then it should go the C:/ node, create it's children, and expand it, go to Program Files node, create it's children and expand it, etc until pic.jpg is visible.
TreePath x = new TreePath(ta);
TreePath y = x.pathByAddingChild(myComputer);
TreePath z = y.pathByAddingChild(programFiles);
tree.expandPath(y);
The above is the general idea of what I'm trying... I can't see why this doesn't work. (ta is empty root folder, then myComputer and programFiles are other treenodes).
Any ideas?
Thanks.
David

Create your TreeModel using the FileSystem as the underlying data store, as shown in this article:
http://java.sun.com/products/jfc/tsc/articles/jtree/
The use JTree#setAnchorSelectionPath when the user clicks on a file to select that item in the tree. Also look at JTree#scrollPathToVisible if your JTree is in a scroll pane.

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???
    Thanks

    You 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

  • Collapse top node and expand below node

    Hi,
    In my Query, I have inserted a characteristic2 below an existing characteristic1(like a hierarchy). The problem I m facing is that if I set "Collapse node" property in the top characteristic(Characteristic1) it is also applied to the below characteristic(Characteristic 2). I want the characteristic 1 to be collapsed by default and characteristic 2 to be expanded by default. Is this possible?
    Regards,
    Krishna

    Hi
    I hope your requirement is not possible.Be coz char 2 will be dependent on Char1.When u collapse Char1 automaticall Char2 also collapsed.
    Regards
    Ram.

  • How to create Node, Attributes and Table Dynamically?

    Hi All,
    How to create node and attributes dynamically, and with this node i want to create table dynamically?? Any related code please?
    Thanks
    Venkat.

    HI
    I guess you are asking the same thing in some other post also .
    use the code as mentioned there also.
    data: wd_node_info type ref to if_wd_context_node_info,
    wd_node type ref to if_wd_context_node,
    lr_container type ref to cl_wd_uielement_container,
    lv_tablename type string,
    lt_db_data type ref to data,
    lr_table type ref to cl_wd_table,
    ls_attribute type wdr_context_attribute_info.
    field-symbols: <lt_data> type any table.
    wd_node_info = wd_context->get_node_info( ).
    CALL METHOD WD_NODE_INFO->ADD_NEW_CHILD_NODE
    EXPORTING
    *STATIC_ELEMENT_TYPE = 'ZDEALER'
    NAME = 'NODE'
    IS_MULTIPLE = ABAP_TRUE
    IS_INITIALIZE_LEAD_SELECTION = ABAP_FALSE
    RECEIVING
    CHILD_NODE_INFO = wd_node_info.
    wd_node = wd_context->get_child_node( name = 'NODE' ).
    wd_node_info = WD_node->GET_NODE_INFO( ).
    data dyn_attr_info type wdr_context_attribute_info.
    DYN_ATTR_INFO-NAME = 'X1'. "Attribute Name
    DYN_ATTR_INFO-TYPE_NAME = 'STRING' ." Data Element(CHAR20) ( Type Of Attribute )
    DYN_ATTR_INFO-NODE_INFO = wd_node_info.
    CALL METHOD wd_node_info->ADD_ATTRIBUTE
    EXPORTING
    ATTRIBUTE_INFO = DYN_ATTR_INFO.
    DYN_ATTR_INFO-NAME = 'X2'. "Attribute Name
    DYN_ATTR_INFO-TYPE_NAME = 'STRING' ." Data Element(CHAR20) ( Type Of Attribute )
    DYN_ATTR_INFO-NODE_INFO = wd_node_info.
    CALL METHOD wd_node_info->ADD_ATTRIBUTE
    EXPORTING
    ATTRIBUTE_INFO = DYN_ATTR_INFO.
    lr_container ?= view->get_root_element( ).
    cl_wd_matrix_layout=>new_matrix_layout( container = lr_container ).
    " Creating internal table with the same structure as our dynamic context node
    CALL METHOD CL_WD_table=>new_table
    EXPORTING
    bind_data_source = 'NODE'
    ID = 'TABLE'
    RECEIVING
    control = lr_table.
    cl_wd_matrix_head_data=>new_matrix_head_data( element = lr_table ).
    *lr_table->bind_data_source( path = 'NODE' ).
    data lr_table_col type ref to cl_wd_table_column.
    data lr_table_col1 type ref to cl_wd_table_column.
    data lr_text_view type ref to cl_wd_text_view.
    data lr_input_field type ref to cl_wd_input_field.
    DATA lr_column_name_header TYPE REF TO cl_wd_caption.
    lr_input_field = cl_wd_input_field=>new_input_field(
    bind_value = 'NODE.X1' ID = 'INP' ).
    LR_TABLE_COL = cl_wd_table_column=>new_table_column( id = 'COL1' ).
    lr_table->add_column( the_column = lr_table_col ).
    lr_column_name_header ?= cl_wd_caption=>new_caption( text = 'X1').
    lr_table_col->set_table_cell_editor(
    THE_TABLE_CELL_EDITOR = lr_input_field ).
    lr_table_col->set_header( lr_column_name_header ).
    lr_text_view = cl_wd_text_view=>new_text_view(
    bind_text = 'NODE.X2' ID = 'TXT' ).
    LR_TABLE_COL1 = cl_wd_table_column=>new_table_column( id = 'COL2' ).
    lr_table->add_column( lr_table_col1 ).
    lr_column_name_header ?= cl_wd_caption=>new_caption( text = 'X2').
    lr_table_col1->set_table_cell_editor(
    THE_TABLE_CELL_EDITOR = lr_text_view ).
    lr_table_col1->set_header( lr_column_name_header ).
    lr_container->add_child( lr_table ).
    cl_wd_matrix_head_data=>new_matrix_head_data( element = lr_table ).
    thanks
    sarbjeet singh

  • Nodes and Subnodes in a Structure of SOLMAN

    Hi Gurus,
    Please let me know the procedure how to create Nodes and Subnodes in a Structure of SOLMAN.
    Structure
        Node A
           Sub Node 1
           Subnode 2
       Node B
           Sub node 3
          Sub node 4..
    etc..
    Thanks and regards,
    Varun

    Hi Varun
    I am not getting what your exact requirement
    you meant to stay project structure in business blue print??
    if yes [http://help.sap.com/saphelp_sm32/helpdata/en/55/93f63aad7e3014e10000000a11402f/frameset.htm|http://help.sap.com/saphelp_sm32/helpdata/en/55/93f63aad7e3014e10000000a11402f/frameset.htm]
    check this blog for steps [/people/sapna.modi/blog/2007/06/28/sap-solution-manager-40-project-management--business-blueprint-phase-part-iii|/people/sapna.modi/blog/2007/06/28/sap-solution-manager-40-project-management--business-blueprint-phase-part-iii]
    SAP tutor here [https://websmp103.sap-ag.de/sapidb/011000358700005456182006E.sim|https://websmp103.sap-ag.de/sapidb/011000358700005456182006E.sim]
    Thanks,
    Jansi

  • Adding Node and Deleting Node in Tree

    Hi,
    I am building a tree dynamically.
    I have a class which has set of properties.I am constructing as follows.
    public class TreeNode
            public function TreeNode()
         public var friendlyName:String;
         public var icon:Class;
         [Bindable]
         public var children : Array;
         public var logicalName:String;
         public var neType:String;
         [Bindable]
         public var arrayColl:ArrayCollection = new ArrayCollection();
         public function addChild(node:TopoTreeNode):void
             if (this.children == null){
                 this.children = new Array();
             children.push(node);
             arrayColl.source = children;    
         public function clearChild():void
             children = null;
         public function removeChild(arrayIndex:int):void
             if(children != null)
             children.splice(arrayIndex,1);
             arrayColl.source = children;
    Then I set the dataProvider as follows where treeModel is object that is injected.
    <mx:Tree id="tree"
                 dataProvider="{treeModel.rootNode.arrayColl}"
                 labelFunction="{treeModel.getDisplayName}"
                 iconFunction="{treeModel.setIcon}"
                 width="100%"
                 height="95%"
                 rowCount="6"
                 showScrollTips="true" showDataTips="true" dataTipFunction="{treeModel.getDisplayName}" allowMultipleSelection="true" click="treeModel.displayItemInWorkingView(tree.selectedItems);"/>
    TreeModel has the following variables
            [Bindable]
            public var rootNode:TopoTreeNode = new TopoTreeNode(); // this is the rootNode.
            [Bindable]
            public var rootChild:TopoTreeNode = new TopoTreeNode(); // this is the child of the root node..
    While constructing the tree, it is working fine.
    But after this when i try to add a node (ie adding a node as child to rootNode), it is getting added to my rootNode object but it is not getting displayed
    When i click on the items in the tree or click on the drop menu in the tree it is getting displayed.
    But i want it to be shown in the tree without clicking anything.
    Could anyone help on this?
    Regards
    Srini

    Off the top of my head, you need to call a refresh of some sort, or executeBindings()... something like that.
    You will also need to start at the root node and expand any parent branches down to the new leaf.
    If you are still having trouble after looking into that, I can try and dig through some of old code and find my solution.

  • Creating WSDD and WSDL file

    I am working on JSR 172,
    I have created a server code, installed Tomcat and Axis.
    Now i want to convert my .java file to .wsdd and .wsdl file the below command are not working plese help.
    java -classpath lib\axis.jar;lib\saaj.jar;lib\jaxrpc.jar;lib\commons-logging-1.0.4.jar; lib\commons-discovery-0.2.jar;lib\wsdl4j-1.5.1.jar;build\classes\.;org.apache.axis.wsdl.Java2WSDL -y DOCUMENT -u LITERAL -l http://localhost:8080/axis/services/ScoreService tutorial.ScoreInterface
    and this produces the below erroe
    Unrecognized option: -y
    Could not create the Java virtual machine.
    Thanks in advance.

    Hi ganesh,
    you have two options to get it working.
    The first one is using a CanonicalEditPolicy, which creates all Nodes and Edges for you based on your semantic model. This is easy to implement, but it has some drawbacks. Your editor will get dirty after opening it, because your Notation Model is changes and no layout information is available.
    The better way is to create Nodes and Edges for each semantic element you created.
    For your code snippet it might look like this:
    XXX model = createInitialModel();
    YYY yyy = XXXFactory.eINSTANCE.createYYY();
    yyy.setAttribute1("2");
    yyy.setAttribute2("name");
    model.getYYYs().add(yyy);
    attachModelToResource(model, modelResource);
    Diagram diagram = ViewService.createDiagram(model, XXXEditPart.MODEL_ID,XXXEditorPlugin.DIAGRAM_PREFERENCES_HINT);
    Node yyyView = ViewService.createNode(diagram, yyy, SemanticHints.YYY,
    ,XXXEditorPlugin.DIAGRAM_PREFERENCES_HINT);
    //Set some layout information assuming you use a XYLayout
    Bounds bounds = NotationFactory.eINSTANCE.createBounds();
    bounds.setX(70);
    bounds.setY(20);
    yyyView.setLayoutConstraint(bounds);
    Regards,
    Andreas

  • Creating Diagram and model file programmatically

    Hi,
    Am trying to create the Diagram and model file programmatically.
    I used the code similar to what is there in XXDiagramEditorUtil.createDiagram().
    In the normal case (when i have an empty domain ie nothing is set into the domain object), the diagram and the domain file gets created and works fine.
    Assume my model is of type XX, and that has a list of YY.
    i create YY and set it inside XX.
    Now when i create the domain file, the <YY> is set correctly inside <XX>.
    But in the diagram file, i dont see the <children/> tags corresponding to the YY.
    How would the appropriate <children/> tags be generated ?
    i tried diagram.createChild(yy.eClass()), but the diagram file does not get generated.
    Pls help.
    AbstractTransactionalCommand command = new AbstractTransactionalCommand(editingDomain,
    Messages.XXXDiagramEditorUtil_CreateDiagramCommandLabel,
    Collections.EMPTY_LIST) {
    protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
    XXX model = createInitialModel();
    YYY yyy = XXXFactory.eINSTANCE.createYYY();
    yyy.setAttribute1("2");
    yyy.setAttribute2("name");
    model.getYYYs().add(yyy);
    attachModelToResource(model, modelResource);
    Diagram diagram = ViewService.createDiagram(model, XXXEditPart.MODEL_ID,XXXEditorPlugin.DIAGRAM_PREFERENCES_HINT);
    if (diagram != null) {
    diagramResource.getContents().add(diagram);
    diagram.setName(diagramName);
    diagram.setElement(model);
    //diagram.createChild(yyy.eClass());
    //diagram.insertChild(arg0);
    try {
    modelResource.save(.getSaveOptions());
    diagramResource.save(getSaveOptions());
    } catch (IOException e) {
    return CommandResult.newOKCommandResult();

    Hi ganesh,
    you have two options to get it working.
    The first one is using a CanonicalEditPolicy, which creates all Nodes and Edges for you based on your semantic model. This is easy to implement, but it has some drawbacks. Your editor will get dirty after opening it, because your Notation Model is changes and no layout information is available.
    The better way is to create Nodes and Edges for each semantic element you created.
    For your code snippet it might look like this:
    XXX model = createInitialModel();
    YYY yyy = XXXFactory.eINSTANCE.createYYY();
    yyy.setAttribute1("2");
    yyy.setAttribute2("name");
    model.getYYYs().add(yyy);
    attachModelToResource(model, modelResource);
    Diagram diagram = ViewService.createDiagram(model, XXXEditPart.MODEL_ID,XXXEditorPlugin.DIAGRAM_PREFERENCES_HINT);
    Node yyyView = ViewService.createNode(diagram, yyy, SemanticHints.YYY,
    ,XXXEditorPlugin.DIAGRAM_PREFERENCES_HINT);
    //Set some layout information assuming you use a XYLayout
    Bounds bounds = NotationFactory.eINSTANCE.createBounds();
    bounds.setX(70);
    bounds.setY(20);
    yyyView.setLayoutConstraint(bounds);
    Regards,
    Andreas

  • Expanded node and children are seen only after second expansion

    Hi,
    I am using a simple JTree control. I am populating children of nodes dynamically when the node is expanded. For this, I first add a "dummy" item for each node under the root, so that the "+" sign appears next to the node. When a node is expanded, I delete the "dummy" node and add children to it. However, the first time I expand the node, the node actually doesn't expand, though treeExpanded() gets called and all children are added correctly (I verified by debugging). When I expand the tree the second time, I can see the expanded node.
    I am using TreeModel's removeNodeFromParent(childNode) and insertNodeInto(childNode, parentNode, childIndex) method to remove and add children respectively.I believe we don't have to explicitly call TreeModel's nodeChanged(), nodesWereInserted() etc?
    Could you please let me know if I am missing something fundamental here?
    Thanks in advance,
    Praneeth

    Hi db,
    I didn't realize that there was a response to my earlier thread. I added the thread to my watchlist. I was under the impression that I would be notified via email in case of a reply to the thread. However, I didn't receive any. Anyway, I did reply to that response there now.

  • Reloading JTree and expanding last selected rows

    I'm working on an applet that loads the nodes of a JTree from a database. When a node is selected, its data are displayed in a different panel. When a "reload" button is clicked, all the nodes in the JTree are removed except for the root node, and the JTree is recreated from the database. I'm try to get the new JTree to expand and select the rows that were selected before reloading, but I can't get this to work.
    Before removing the nodes, I save the currently selected row numbers using JTree.getSelectionRows(). After recreating the JTree, I re-select the previously selected rows and try to expand them:
    // tree is the name of the JTree.
    tree.setSelectionRows(selected);
    for (int i= 0; i < Array.getLength(selected); i++) {
                System.out.println("selected row: " + selected);
    tree.scrollRowToVisible(selected[i]);
    tree.updateUI();
    The previously selected rows do not automatically become visible in the resulting JTree. I also tried using tree.expandRow instead of scrollRowToVisible, with the same results.
    Any help would be appreciated!

    I think part of your problem is this...
    When you repopulate your tree, and only the root node is visible, getRowCount() will return 1. When you call expandRow(x) where x > 1, the result is basically a no-op (nothing happens). This is the correct behavior for these methods.
    In other words, I think you need to come up with a whole new algorithm.
    Let's assume you have a tree that looks like...
    Node 0
    |__________Node 0.0
    |               |__________Node 0.0.0
    |
    |__________Node 0.1
    |__________Node 0.2
                     |__________Node 0.2.0
                     |__________Node 0.2.1Try this...
    //save the current open/closed state of the tree and selection state
    Vector<Integer> selectedRows = new Vector<Integer>();
    Vector<Boolean> openClosed = new Vector<Boolean>(tree.getRowCount());
    openClosed.setSize(tree.getRowCount());
    for( int i = 0; i < tree.getRowCount(); ++i )
       if( tree.isExpanded(i) )
            openClosed.set(i,true);
       else
            openClosed.set(i,false);
       if( tree.isRowSelected(i) )
           selectedRows.add(i);
    //at this point we have all the needed state information
    // rebuild to tree from the database now
    // then do this
    int rowIndex = 0;
    while( rowIndex < tree.getRowCount() )
        if( openClosed.getElementAt(rowIndex).booleanValue() == true )
             tree.expandRow(rowIndex);
             // note that if a row gets expanded, getRowCount() will increase
        ++rowIndex;
    // at this point, your tree should be expanded exactly as it was before the reload
    int[] rows = new int[selectedRows.size()];
    int index = 0;
    for( Integer i: selectedRows )
       rows[index++] = i;
    tree.setSelectionRows(rows);
    // at this point the tree should have the same selection as before the reload.I hope this helps. Please reward me the Duke Dollars if it does. Not awarding the Duke Dollars kills the system (which is an honor system). A dead system hurts us all.
    P.S. I guess I never referenced the little tree I drew. Oh well. It looks great doesn't it?

  • Move node and its silings from one jtree to another

    Hi,
    I am trying to move JTree nodes and its siblings from one JTree to another. If anyone has the code, please post it on the website or mail to [email protected]
    Thanks
    Pavan

    Pavan,
    You may have to do a sanity check before adding it.
    Better run the program in a debugger and have a break point at the clipBoard.put() line. Else system.out.println() lines will kill enormouse programming time rather than using debugger.
    Also in following this thread, i found that you may have to be bit more thorough with the DefaultMutableTreeNode class first.
    Thanks,
    ananth
    Thomas,
    for (int p = 0; p < jtree.getSelectionCount(); p++) {
                   System.out.println(".3.......p= "+p);
    node =
    =
    (EuamDefaultMutableTreeNode)paths[p].getLastPathCompon
    nt();
                        clipBoard.put(node.toString(), node);
                   System.out.println(".4...........");
    Giving error at clipBoard.put()
    line....java.lang.NullPointerException
    ..Any idea why?
    Thanks.
    Pavan

  • How to create a new node and its subnodes(zreports) in Transaction SRET

    Hi Expets,
    My requirement is to create a new node and subnodes(zreports) in the Transaction SRET.
    Where as i  am able to create a subnode(zreports) under the existing node but not able to create a New Node and
    Subnodes(zreports) under it.
    To create the subnodes(zreports) i used Transaction SERP and i was able to create the new node in SERP but not able to find it in SRET.
    So please help me out.
    Thanks,
    Krishna

    Dear Pushpa,
    Transaction Code :SHD0 is working fine.
    Please accept my sincere thanks for your sharing your Knowledge.
    I am able to fulfill my
    Regarding the enhancement, I have not tried.
    Once I will complete, I will award the fulll marks to you.
    With Best Regards,
    Raghu Sharma

  • How to Create Instances in the Transient Root Node and Sub Nodes from Root Node Query Method ?

    Hi All,
    I am Creating a BOPF BO with 3 Nodes,
    Node 1) ROOT -- > contains a query,
    using Root Node I have created Search UIBB Configuration in FBI.
    In testing -- > when i enter Data in the Search Criteria Fields am able to get the details in to the query method
    from Imporing parameter : 'IT_SELECTION_PARAMETERS'.
    HERE I am fetching data from a standard table and trying to fill the data in the Node : 'MNR_SEARCH_RESULT'.
    How to Append data to the Sub node 'MNR_SEARCH_RESULT' when there is no Node instance created in the ROOT Node ?
    For This  I have created an instance in the ROOT Node and Using that I tried to create Instance in the Sub Node 'MNR_SEARCH_RESULT'.
    Below is my code which i have placed in the Query method ..
    DATA : LR_DATA TYPE REF TO ZBO_S_ROOT1.
    DATA : LR_SEARCH_RES TYPE REF TO ZBO_S_MNR_SEARCH_RESULT.
    DATA : LO_CI_SERVICE_MANAGER TYPE REF TO /BOBF/IF_TRA_SERVICE_MANAGER,
            LO_TRANSACTION_MANAGER TYPE REF TO /BOBF/IF_TRA_TRANSACTION_MGR.
       LO_CI_SERVICE_MANAGER = /BOBF/CL_TRA_SERV_MGR_FACTORY=>GET_SERVICE_MANAGER( IV_BO_KEY = ZIF_BO_TEST_PO_C=>SC_BO_KEY ).
       LO_TRANSACTION_MANAGER = /BOBF/CL_TRA_TRANS_MGR_FACTORY=>GET_TRANSACTION_MANAGER( ).
    CREATE DATA LR_DATA.
    LR_DATA->KEY = LO_CI_SERVICE_MANAGER->GET_NEW_KEY( ).
    LR_DATA->ROOT_KEY   = IS_CTX-ROOT_NODE_KEY.
    LR_DATA->PIPO_MAT_ID = '100100'.
    LR_DATA->PIPO_MAT_DESC = 'MATERIAL'.
    LR_DATA->PIPO_SPRAS = 'E'.
    LR_DATA->PIPO_MATL_TYPE = 'ZPMI'.
    LR_DATA->PIPO_MATL_GROUP = 'ZKK'.
         DATA lt_mod      TYPE /bobf/t_frw_modification.
         DATA lo_change   TYPE REF TO /bobf/if_tra_change.
         DATA lo_message  TYPE REF TO /bobf/if_frw_message.
         FIELD-SYMBOLS: <ls_mod> LIKE LINE OF lt_mod.
        APPEND INITIAL LINE TO lt_mod ASSIGNING <ls_mod> .
        <ls_mod>-node        =   ZIF_BO_TEST_PO_C=>sc_node-ROOT.
        <ls_mod>-change_mode = /bobf/if_frw_c=>sc_modify_create.
        <ls_mod>-key         = LR_DATA->KEY.
        <ls_mod>-data        = LR_DATA.
    DATA : LT_CHG_FIELDS TYPE /BOBF/T_FRW_NAME.
    DATA : LS_CHG_FIELDS LIKE LINE OF LT_CHG_FIELDS.
    DATA : LV_KEY TYPE /BOBF/CONF_KEY.
    CALL METHOD IO_MODIFY->CREATE
       EXPORTING
         IV_NODE            = ZIF_BO_TEST_PO_C=>sc_node-ROOT
         IV_KEY             = LR_DATA->KEY
         IS_DATA            = LR_DATA
         IV_ROOT_KEY        = IS_CTX-ROOT_NODE_KEY
       IMPORTING
         EV_KEY             = LV_KEY .
    CREATE DATA LR_SEARCH_RES.
    LR_SEARCH_RES->KEY           = LO_CI_SERVICE_MANAGER->GET_NEW_KEY( )..
    LR_SEARCH_RES->PARENT_KEY    = LV_KEY.
    LR_SEARCH_RES->ROOT_KEY    = LV_KEY.
    LR_SEARCH_RES->MATNR    = '123'.
    LR_SEARCH_RES->ERSDA    = SY-DATUM.
    LR_SEARCH_RES->ERNAM    = SY-UNAME.
    **LR_SEARCH_RES->LAEDA    = .
    **LR_SEARCH_RES->AENAM    = .
    **LR_SEARCH_RES->VPSTA    = .
    *LR_SEARCH_RES->LVORM    = .
    LR_SEARCH_RES->MTART    = 'ZPI'.
    LR_SEARCH_RES->MBRSH    = 'ZTP' .
    LR_SEARCH_RES->MATKL    = 'MAT'.
    **LR_SEARCH_RES->BISMT    = ''
    **LR_SEARCH_RES->MEINS    =
    CALL METHOD io_modify->create
               EXPORTING
                 iv_node            = ZIF_BO_TEST_PO_C=>sc_node-MNR_SEARCH_RESULT
                 is_data            = LR_SEARCH_RES
                 iv_assoc_key       = ZIF_BO_TEST_PO_C=>sc_association-root-MNR_SEARCH_RESULT
                 iv_source_node_key = ZIF_BO_TEST_PO_C=>sc_node-root
                 iv_source_key      = LV_KEY
                 iv_root_key        = LV_KEY.
    I am Unable to set data to the Node . I did not get any error message or Dump while executing . when i tried to retrive data I got the details from the node but am unable to view those details in the FBI UI and BOBT UI while testing .
    Please provide your valuable Suggestions.
    Thanks in Adv.
    Thanks ,
    Kranthi Kumar M.

    Hi Kranthi,
    For your requirement you need only two nodes. Root Node and Result node. Use the same structure for both.
    To create Instance while search.
    Create Query method with input type which has the required fields for selection criteria.
    Fetch the data and create instance in the root node.
    Pass the new instance key as exporting parameter form Query Method.
    To Move data from ROOT to Result.
    Create a action at root node.
    Write a code to create new entries in Result node.
    Then configure the Search UIBB and display result in List UIBB. Add button and assign the action MOVE_MAT_2_RESULT.
    Create another List uibb to display data from Result node.
    Connect the UIBBs using wire schema. SEARCH -> LIST(ROOT) ---> LIST(RESULT).
    Give src node association for ROOT to RESULT Configuration.
    Regards,
    Sunil

  • How to create a new Node and bind it to the wdContext root at run time

    Hi experts,
    Does anyone have sample code about 1) adding a new node to the root context, 2) give it a name and 3) referring to this newly created node with the conetxt path?
    Thanks

    Armin,
    I am trying to do this and keep getting erro about incompatible class:
    wdContext.getNodeInfo().addChild("DynamicNode",
                  mymodel.class,
                  true,
                  CMICardinality.ONE,
                  CMICardinality.ZERO_TO_ONE,
                  true,
                  wdContext.getContext().getStructure("com.my.structure") );
                  IWDNode node = wdContext.getChildNode("DynamicNode", 0);
                  IWDNodeElement e = node.createElement(an_instance_of mymodelObject());
                  node.addElement(e);
    Can I do it this way?

  • Lining up root node and child nodes in JTree

    I have a JTree that has a root node and n child nodes. There are no sub-levels - it is structured just like AOL instant messenger. What I want to do is have the child node icons line up directly under the root nodes text. For example (if you can read this), where "-" denotes the icon:
    - root
    - child
    - child
    Currently it is something like this:
    - root
    - child
    - child
    I have been messing with the setLeftChildIndent( int ) and setRightChildIndent( int ), but they are not doing much...they seem to not want to only move the leaf nodes but all of the nodes, so its not doing exactly what I want.
    Any ideas? In the meantime I'll be looking more into how exactly those indent mutators work.
    Thanks!

    What you want is to do a setRootVisible(false) on the JTree.
    All your child nodes are then your "root level" folders.
    tree.setRootVisible(true):
    +root
    +--child1
    +--child2
    +--child3
    +----child3a
    +----child3btree.setRootVisible(false):
    +child1
    +child2
    +child3
    +--child3a
    +--child3b

Maybe you are looking for

  • Wishlist for next version

    Hi, I haven't seen this topic anywhere else, so I thought I would start it here. I wish ... • that I could bookmark or color-label tracks in iTunes. This could be a quick visual cue (rather than looking at the 'last played' date) when listening over

  • How do I get automator scripts into iTunes? Very frustrated.

    This is one of those questions that probably has a very simple answer unless you haven't worked with Automator or applescripts. I found Automator, created a script for iTunes to change settings for audiobooks that I import from CD so that it remember

  • 'N' character in Select query

    select * from hosts where host_name=N'ps456' what is the significance of N character in host_name=N'ps456' ?

  • DPM 2012 R2 Roll Up 2: Agent Terminating or Checksum mismatch during backups

    Hi There, I have dual DPM server deployment. Primary DPM server backs up to disk in my production site and then I have a Secondary DPM server creating replicas to Disk and Tape in my DR site. Both DPM servers are running DPM 2012 R2. I recently insta

  • Po number at Item level for Invoice

    Hi, My Invoice has 2 Line Items. Each coming from different Sales Order as a result of Collective Delivery. I want to Print Purchase order number at the Item level from respective Sales Orders. How can I trace it back, which tables would be useful? R