SmartGWT:如何通过单击另一个窗格中的树节点动态地在窗格中创建选项卡

时间:2013-05-07 04:38:39

标签: smartgwt

我是smartGWT的新手。我在以下链接中看到了一个教程 http://www.javacodegeeks.com/2011/01/advanced-smartgwt-tutorial-part-2.html

这里有两个类,一个是主区,另一个是导航区。导航区域包含树节点。当我单击树节点时,它会显示一个弹出窗口,但我想创建一个带有节点单击事件的选项卡。

我尝试了以下方式,但它没有用。我认为它添加了标签,因为mainarea已经加载它没有产生任何影响

Main Area Class有以下代码:

public class MainArea extends SectionStack {

final TabSet topTabSet = new TabSet();

public static MainArea mainareaobj;
public static MainArea getInstance()
{
    if(mainareaobj==null)
    {
        mainareaobj=new MainArea();
    }
    return mainareaobj;
}
public MainArea() {

    super();
    this.setOverflow(Overflow.AUTO);

    topTabSet.setTabBarPosition(Side.TOP);  
    topTabSet.setTabBarAlign(Side.LEFT);
    SectionStackSection section2 = new SectionStackSection("TabSection2");  
    section2.setExpanded(true);  
   section2.addItem(topTabSet);


    this.addSection(section2);
}

以下代码是导航网格

public class NavigationTreeGrid extends TreeGrid {
public String scenario_Name;
public Tab scenarioTab;
MainArea obj=MainArea.getInstance();
public NavigationTreeGrid() {
    setShowOpenIcons(false);
    setShowDropIcons(false);
    setShowSelectedStyle(true);  
    setShowPartialSelection(true);  
    setCascadeSelection(false);
    setCanSort(false);
    setShowConnectors(true);
    setShowHeader(false);
    setLoadDataOnDemand(false);
    setSelectionType(SelectionStyle.SINGLE);

    Tree data = new Tree();
    data.setModelType(TreeModelType.CHILDREN);

    data.setRoot(
            new TreeNode("root", 
                    new TreeNode("rootNode",
                            new TreeNode("Node1"), new TreeNode("Node2"),new TreeNode("Node3"),new TreeNode("Node4"),new TreeNode("Node5"))) 

    );

    setData(data);

    addNodeClickHandler(new NodeClickHandler() {            
        @Override
        public void onNodeClick(NodeClickEvent event) {
            scenario_Name = event.getNode().getName();

            obj.topTabSet.addTab(createTab(scenario_Name));

        }
    });

}

public Tab createTab(String tabName)
{
    scenarioTab=new Tab(tabName);
    scenarioTab.setCanClose(true);
    //scenarioTab.setWidth(300);
    return scenarioTab;
}    

任何PLZ都可以帮助我

3 个答案:

答案 0 :(得分:1)

您需要致电scenarioTab.setPane(canvas)并向新标签添加一些内容。可能是其他问题,但你没有发布足够的代码。

答案 1 :(得分:1)

正确地将导航树和区域堆栈添加到EntryPoint.onModuleLoad()中的主要显示组件。

即使MainArea实例已在NavigationTreeGrid内初始化,也必须将其单独添加到布局中。

public void onModuleLoad() {
        HStack drawArea = new HStack();
        drawArea.setWidth100();
        drawArea.setHeight100();

        drawArea.addMember(new NavigationTreeGrid());
        drawArea.addMember(MainArea.getInstance());

        drawArea.draw();
}

这将创建网格,节点点击事件将向选项卡集添加新的但空的选项卡。 需要使用scenarioTab.setPane(<tab content>)中的NavigationTreeGrid.createTab()来填充标签。

您的代码如上所述,但可以改进。 检查“SmartGWT ListGrid final”以获得另一种创建简单屏幕的方法。

答案 2 :(得分:-1)

addNodeClickHandler(new NodeClickHandler() {            
        @Override
        public void onNodeClick(NodeClickEvent event) {
            scenario_Name = event.getNode().getName();
            obj.topTabSet.addTab(createTab(scenario_Name));
           obj.topTabSet.redraw();
        }
    });

}

只是obj.topTabSet.redraw();将解决问题。所以每当我们点击节点时,它都会创建标签并重新绘制标签集。