【问题标题】:Designing a gui in GWT在 GWT 中设计 gui
【发布时间】:2012-02-02 14:22:42
【问题描述】:

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

在一个面板中,我在 selectionHandler 上的 RPC 调用成功时添加了 treeItems 的 tree Widget

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

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

【问题讨论】:

标签: java gwt gwt2


【解决方案1】:

如果我正确理解您,您希望在特定回调完成之前禁止用户单击某些小部件。为此,您应该有一个更大的z-indexopacity 的自定义面板。例如,类似DialogBoxsetGlassEnabled(true) 方法并尝试在回调中使用该技术。当异步请求开始时,在onSuccessonFailure 中显示该面板,您应该隐藏它。顺便说一句,my-gwt 有实现此类功能的 LoadingPanel 类。还有另一个mask GWT-Ext 的现场演示。

【讨论】:

    【解决方案2】:

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

    "当点击 treemItem 时,所有其他 treeItem 和小部件 不应选择相同和不同的面板。”

    当然,当您单击一个树节点时,这是您想要激活的唯一节点。没有其他节点有任何活动。这是约定俗成的。

    而且我真的不知道这句话是什么意思:

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

    您的问题应该是:

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

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

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

    构造函数吃入 MyData 记录,实例化图标图像和标题标签,并将自身关联为图标和标签的点击处理程序:

      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 ...
    }
    

    假设您有一个拆分面板。左侧是树小部件,右侧面板是某种显示。因此,onclick 除了触发 RPC 获取之外,还会调用 displayRightPanel(data),而您希望如何显示该数据。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      相关资源
      最近更新 更多