Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT-打印树_Java_Gwt - Fatal编程技术网

Java GWT-打印树

Java GWT-打印树,java,gwt,Java,Gwt,我编写了以下代码来打印树: 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.RootPan

我编写了以下代码来打印树:

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。如果用户选择C f12,则应打印:

D> f1>f12

我的代码在所选项目变为D时崩溃,因为D没有父项。如何改进此代码,以便能够根据用户选择的节点携带BradCrump

有没有办法检查所选节点是否为根节点

非常感谢。 -玛丽亚

更新的工作代码:

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);
    }
}
您有以下代码:

System.out.println("Selected Item: "+ selectedItem.getText());
TreeItem parentItem  = event.getSelectedItem().getParentItem();
t.setSelectedItem(parentItem);
parentItem=parentItem.getParentItem();
您需要检查
parentItem
是否为空。如果为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
}

非常感谢。它确实奏效了。现在我的问题是,如果我想从addSelectionhandler方法之外打印出树,那么我该怎么做?我有一个静态私有字符串,它获取节点名称,但是当我退出selectionHandler方法时,我无法打印它们。Thanks@Maria-如果从树中的任意节点开始,例如
TreeItem A
,则可以打印该节点的路径。或者您可以将打印逻辑移动到自己的方法中,例如
printTreeFromNode(TreeItem节点)
并将TreeItem传递到该方法中。我想向上打印树,即从根节点到所选节点。