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传递到该方法中。我想向上打印树,即从根节点到所选节点。