2012-02-01 99 views
1

我正在学习设计GWT中的GUI 我有RootPanel,我已经放置了所有的小部件。在GWT中设计gui

在一个面板我已经把树部件在treeItems是在RPC调用的成功加上了selectionHandler

我想要做什么: 当点击treemItem,所有其他treeItem和小部件不应该选择相同和不同的面板。就像正在进行的处理一样,所以没有其他事情可以做。

请提出一些想法或示例代码或示例。

+1

你找到一个解决方案?如果不检查GlassPanel对话框菜单http://www.asquare.net/gwttk/apps/demo/Demo.html上 – 2012-02-02 06:10:45

回答

4

如果我正确理解你,你想禁止用户点击一些小部件,直到特定的回调完成。为了做到这一点,你应该有一个更大的定制面板z-indexopacity。例如,像DialogBoxsetGlassEnabled(true)方法,并尝试在您的回调中使用该技术。当异步请求开始显示面板onSuccessonFailure时,应该隐藏它。顺便说一句,我的gwt有LoadingPanel类实现这种功能。 GWT-Ext的另一个mask现场演示。

1

这种说法是多余的和不必要的:

“当treemItem点击,所有其他treeItem和 相同,不同的面板部件不应该被选中。”

当然,当你点击一个树节点时,这是你想激活的唯一节点。没有其他节点会有任何活动。这是惯例。

我真的不知道这种说法是怎么一回事:

“就像有一个处理事情所以没有其他的东西被允许 做”

你的问题应该仅仅是:

我如何添加子节点的树部件,其中子节点的增加 只有当我点击节点上?当我点击一个节点时,如果它没有 子节点,则会触发一个RPC来获取节点。我的RPC结果应该如何更新节点?点击一个节点后,应该高亮显示 。整棵树上应该只有一个突出显示/选定的节点。

延长Horizo​​ntalPanel以包含图标和标题。 它应该实现IsTreeItem。 它应该实现ClickHandler,以便它可以作为点击处理程序添加到图标和标题标签。

public class Node 
extends HorizontalPanel 
implements ClickHandler, IsTreeItem{ 
    Image img; 
    Label label; 
    MyData data; 
    TreeItem nodeWrapper; 

构造在迈德特记录吃,实例化的图标图像和标题标签,并赞同作为函数clickhandler的图标和标签:

public Node(MyData data){ 
    this.nodeWrapper = new TreeItem(this); 
    this.img = new Image(data.getIconUrl()); 
    this.label = new Label(data.getTitle()); 
    this.data = data; 
    this.add(img); 
    this.add(this.label); 

    // ensure onclick is triggered either by clicking img or label. 
    this.img.addClickHandler(this); 
    this.label.addClickHandler(this); 
    } 

实施IsTreeItem要求节点能够本身证实了TreeItem:

public TreeItem asTreeItem(){ 
    return this.nodeWrapper; 
    } 

的clickhandling将获取的子记录列表,并反复从孩子的记录和创建新节点将它们添加到当前节点。这是RPC回调操作发生的地方。

public void onClick(ClickEvent e){ 
    this.displayRightPanel(this.data); 

    if(this.nodeWrapper.getChildCount()==0) 
     fetchNodeData(
     this.nodeWrapper, 
     this.data.getId(), 
     new AsyncCallBack<List<MyData>>(){ 
      public void onSuccess(List<MyData> nodeDataList){ 
      for(MyData nodeData : nodeDataList){ 
       Node.this.nodeWrapper.addItem(new Node(nodeData)); 
      } 
      } 
      public void onFailure(Throwable sorry){ 
      doWhatever(); 
      } 
     } 
    ); 
    } 

关闭类定义之前定义其他相关方法:

//blah ... blah ... blah... 
} 

因为这不是在RPC的教程,你应该找出如何写的RPC部分。您需要定义MyData,它是GWT客户端和RPC Servlet之间的共享POJO。 RPC servlet必须返回MyData列表。您至少需要接受第二范式的数据库规范化教育,以了解为什么需要getId()方法。

public Interface MyData{ 
    String getIconURL(); 
    String getTitle(); 
    String getId(); 
    // among others ... 
} 

推测你有一个splitpanel。左侧是树形部件,右侧是某种显示器。这样的onclick,除了引发RPC取,也叫displayRightPanel(数据),以及你希望怎样显示数据是留给你。

您可以创建第一个根节点,它作为树的根关联,而树的其余部分将通过用户点击来填充。所以根节点会要求你编写一个MyData记录,它将提供iconUrl,标题和一些根数据。

树部件将管理其成员的突出显示,并确保只有一个成员被高亮显示。