3

ツリーを印刷するために次のコードを書きました。

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

ノード D にはサブノード f1 があります。f1 にはサブノード f11 と f12 があります。ユーザーが f12 を選択すると、次のように表示されます。

D>f1>f12。

Dには親がないため、選択したアイテムがDになるとマイコードがクラッシュします。ユーザーが選択したノードに基づいてブラッドクラムを表示できるように、このコードを改善するにはどうすればよいですか?

選択したノードがルート ノードかどうかを確認する方法はありますか?

本当にありがとう。-マリア

更新された作業コード:

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

1 に答える 1

1

あなたはこのコードを持っています:

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

parentItemが nullかどうかを確認する必要があります。null の場合はルートです。このようなもの:

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
}
于 2012-08-02T15:49:46.773 に答える