在GWT中设计一个gui

时间:2012-02-01 14:46:40

标签: java gwt gwt2

我正在学习在GWT中设计GUI 我有RootPanel,我把所有的小部件都放在了。

在一个面板中,我已将树Widget放在其中,在selectionHandler上的RPC调用成功时添加了treeItems

我想做什么: 单击treemItem时,不应选择所有其他treeItem和同一面板上的小部件。就像正在进行处理一样,所以不允许其他任何事情发生。

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

2 个答案:

答案 0 :(得分:4)

如果我正确理解您,您希望禁用用户单击某些小部件,直到特定回调结束。为此,您应该拥有一个更大z-indexopacity的自定义面板。例如,类似于DialogBox的{​​{1}}方法,并尝试在回调中使用该技术。当异步请求开始显示setGlassEnabled(true)onSuccess中的面板时,您应该隐藏它。顺便说一句,my-gwt有LoadingPanel类来实现这样的功能。还有GWT-Ext中的另一个mask现场演示。

答案 1 :(得分:1)

这句话是多余的,不必要的:

  

“单击treemItem时,所有其他treeItem和小部件都打开   不应该选择相同和不同的面板。“

当然,当您单击树节点时,这是您要激活的唯一节点。没有其他节点会有任何活动。按照惯例。

我真的不知道这句话到底是什么:

  

“就像正在进行处理一样,所以不允许其他任何事情发生   做“。

您的问题应该只是:

  

如何将子节点添加到树窗口小部件中,其中添加了子节点   只有当我点击节点时?当我点击一个节点时,如果它没有   子节点,将触发RPC以获取节点。应该怎样   我的RPC结果更新节点?点击节点后,它应该是   突出显示。整个树上应该只有一个突出显示/选定的节点。

扩展Horizo​​ntalPanel以包含图标和标题。 它应该实现IsTreeItem。 它应该实现ClickHandler,以便它可以作为clickhandler添加到图标和标题标签。

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

构造函数在MyData记录中进行操作,实例化图标图像和标题标签,并将自身关联为图标和标签的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;
  }

单击处理将获取子记录列表,并从子记录中迭代创建新节点,并将它们附加到当前节点。这是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 ...
}

假设您有一个分屏。左侧是树小部件,右侧面板是某种显示。因此,除了触发RPC提取之外,onclick还会调用displayRightPanel(数据),并且由您决定如何显示该数据。

您将创建第一个根节点并将其关联为树的根,并且用户单击将填充树的其余部分。因此,根节点将要求您编写一个MyData记录,该记录将提供iconUrl,title和一些根数据。

树窗口小部件将管理其成员的突出显示,并确保只突出显示一个成员。