Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GWT - printing a Tree

Tags:

java

gwt

I wrote the following code to print a tree:

package test.com.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Tree;
import com.google.gwt.user.client.ui.TreeItem;
import com.google.gwt.user.client.ui.VerticalPanel;

/**
 * Entry point classes define <code>onModuleLoad()</code>.
 */
public class TestGwt implements EntryPoint 
{
    public static String bc="";

    public void onModuleLoad() 
    {
        VerticalPanel v = new VerticalPanel();
        TreeItem a = new TreeItem( "A" );
        TreeItem b = new TreeItem( "B" );
        TreeItem c = new TreeItem( "C" );

        TreeItem d = new TreeItem( "D" );

        TreeItem f1 = new TreeItem( "f1" );
        TreeItem f11 = new TreeItem( "f11" );
        TreeItem f12 = new TreeItem( "f12" );
        d.addItem( f1 );
        f1.addItem( f11 );
        f1.addItem( f12 );


        final Tree t = new Tree();
        t.addItem( a );
        t.addItem( b );
        t.addItem( c );
        t.addItem( d );

        t.addSelectionHandler(new SelectionHandler<TreeItem>() 
        {
            @Override
            public void onSelection(SelectionEvent<TreeItem> event) 
            {           
                TreeItem selectedItem= event.getSelectedItem();
                if(selectedItem != null)
                {
                    System.out.println("Selected Item: "+ selectedItem.getText());
                    TreeItem parentItem  = event.getSelectedItem().getParentItem();
                    t.setSelectedItem(parentItem);
                    parentItem=parentItem.getParentItem();

                }


            }
        });

        v.add(t);
        // Add it to the root panel.
        RootPanel.get().add(v);
    }
}

Node D has has Subnode f1. f1 has subnodes f11 and f12. if user selectc f12, it should print:

D>f1>f12.

My Code crushes when the selected item becomes D, since D has no parent. How do I improve this code so that I am able to bring a bradcrumb based on which node the user selects?

is there any way to check if the selected node is the root node?

Thanks so much. -Maria

Updated working code:

package test.com.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Tree;
import com.google.gwt.user.client.ui.TreeItem;
import com.google.gwt.user.client.ui.VerticalPanel;

/**
 * Entry point classes define <code>onModuleLoad()</code>.
 */
public class TestGwt implements EntryPoint 
{
    public static String bc="";

    public void onModuleLoad() 
    {
        VerticalPanel v = new VerticalPanel();
        TreeItem a = new TreeItem( "A" );
        TreeItem b = new TreeItem( "B" );
        TreeItem c = new TreeItem( "C" );

        TreeItem d = new TreeItem( "D" );

        TreeItem f1 = new TreeItem( "f1" );
        TreeItem f11 = new TreeItem( "f11" );
        TreeItem f12 = new TreeItem( "f12" );
        d.addItem( f1 );
        f1.addItem( f11 );
        f1.addItem( f12 );


        final Tree t = new Tree();
        t.addItem( a );
        t.addItem( b );
        t.addItem( c );
        t.addItem( d );


        t.addSelectionHandler(new SelectionHandler<TreeItem>() 
        {
            @Override
            public void onSelection(SelectionEvent<TreeItem> event) 
            {           
                TreeItem pItem = event.getSelectedItem().getParentItem();
                if(pItem == null)
                {
                    bc+=" > "+event.getSelectedItem().getText();
                }
                else
                {
                    TreeItem selectedItem= event.getSelectedItem();
                    if(selectedItem != null)
                    {
                        bc+=" > "+ selectedItem.getText();
                        TreeItem parentItem  = event.getSelectedItem().getParentItem();
                        t.setSelectedItem(parentItem);
                        parentItem=parentItem.getParentItem();

                    }
                }               
            }
        });
        System.out.println(bc);
        v.add(t);
        // Add it to the root panel.
        RootPanel.get().add(v);
    }
}
like image 363
Maria Avatar asked Feb 15 '26 13:02

Maria


1 Answers

You have this code:

System.out.println("Selected Item: "+ selectedItem.getText());
TreeItem parentItem  = event.getSelectedItem().getParentItem();
t.setSelectedItem(parentItem);
parentItem=parentItem.getParentItem();

You need to check if parentItem is null. If it is null, then it is the root. Something like this:

TreeItem parentItem = event.getSelectedItem().getParentItem();
if (parentItem == null) {
    // then it is the root; special root-handling instructions would go here
} else {
    // then it is NOT the root
}
like image 195
Roddy of the Frozen Peas Avatar answered Feb 17 '26 03:02

Roddy of the Frozen Peas



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!