2

我是 GWT 和网络的新手。

我正在根据 http://code.google.com/p/cloud-tasks-io/source/browse/#svn%2Ftrunk%2FCloudTasks-AppEngine%2Fsrc%2Fcom%2Fcloudtasks%2Fclient制定自己的项目

我正在尝试使用弹出/对话框。弹出窗口和对话框始终显示在小部件后面。我一直在谷歌搜索,我发现最相关的是这个 http://groups.google.com/group/gwt-google-apis/browse_thread/thread/40db4fcbe10d2060,它没有提供任何答案。无论如何,我有第 3 方库,bst-player 1.3,它使用 flash。所以我禁用了它(后来也将其删除),弹出窗口不会出现在顶部!它仍然隐藏在小部件后面。

我了解到 popuppanel/dialogpanel 类似不需要添加到另一个小部件。一种不同的说法是,它不是一个普通的小部件,它不能附加到父级,但它会将自己附加到 dom 以保证在顶部(来自GWT 复合小部件

我不知所措,我在这里……

更新

这是我的弹出课程

public class PopUp {
    static PopupPanel simplePopup;

    public static void init() {
        simplePopup = new PopupPanel(true);
        simplePopup.hide();
        simplePopup.setVisible(false);

 //       DOM.setIntStyleAttribute(simplePopup.getElement(), "zIndex", 3);
    }

    public static void showpopupmsg(String msg, int left, int top) {
        if (simplePopup == null) {
            init();
        }
        if (msg != null && !msg.equalsIgnoreCase("")) {
            simplePopup.ensureDebugId("cwBasicPopup-simplePopup");
            simplePopup.setWidget(new HTML(msg));
            simplePopup.setVisible(true);
            simplePopup.setPopupPosition(left, top);
            simplePopup.setWidth("475px");  //575
            simplePopup.setGlassEnabled(true);
            simplePopup.show(); 
        }
    }

    public static void show(String message){
        if (simplePopup == null) {
            init();
        }
        simplePopup.setGlassEnabled(true);
        simplePopup.setTitle(message);
        simplePopup.center();
    }
}

这是我打电话的方式

tasksTable.doneColumn.setFieldUpdater(new FieldUpdater<TaskProxy, Boolean>() {
  public void update(int index, TaskProxy task, Boolean value) {

      String msg = "Here is the popup. All the way underneath";
      Widget source = tasksTable;
      int left = source.getAbsoluteLeft() - 50;
      // source.getAbsoluteLeft() + 25;
      int top = source.getAbsoluteTop() - 25;
      PopUp.showpopupmsg(msg, left, top);       //Here is the calling method

    TaskRequest request = requestFactory.taskRequest();
    TaskProxy updatedTask = request.edit(task);
    updatedTask.setDone(value);
    request.updateTask(updatedTask).fire();

  }
});

这是弹出窗口在小部件下方的方式。 在此处输入图像描述

4

4 回答 4

2

问题的根源一直难以捉摸,因为我还是 webapp 的新手,但是,我终于自己解决了。罪魁祸首是CSS。它将整个事物的 z-index 定义为相当高,如以下代码行 1333 所示。

http://code.google.com/p/cloud-tasks-io/source/browse/trunk/CloudTasks-AppEngine/war/CloudTasks.css#1333

我之前对 z-index 表示怀疑,并用一个微不足道的值 3 来尝试它,如相关 Popup 类的注释掉代码段中所示。我必须取消注释并将其设置为 101。

DOM.setIntStyleAttribute(simplePopup.getElement(), "zIndex", 101);

我是,你知道,#$%#@#$*。

于 2012-04-25T04:46:03.283 回答
1

z-index 仅决定哪个小部件应显示在顶部.. 下方的小部件弹出窗口可能具有较高的 z-index 值。

通过 css 设置弹出窗口的 z-index(推荐)或 DOM 将为您工作

于 2012-04-25T13:10:38.057 回答
0

根据我的感觉,使用“PopUp”对象的静态方法有点奇怪......这样,我认为事情是相对于顶部而不是调用者对象。

也许你可以考虑让你的类'Popup'扩展'popupanel'并在你的调用代码中,只需

new PopUp(msg,left,top).show() ;
于 2012-04-10T07:20:48.757 回答
0

我最近为需要与其调用者对齐的弹出面板编写了自己的解决方案。该解决方案由一个 PopupPanel 扩展和一个 Button 扩展组成。

按钮扩展有一个面板扩展的实例,在单击它的那一刻,它会将其坐标、宽度和高度赋予其面板。

            @Override
            public void onClick(ClickEvent event) {
                if (optionsPanel.isShowing()) {
                    optionsPanel.hide();
                } else {
                    optionsPanel.setButtonBounds(new Bbox(
                            getAbsoluteLeft(), getAbsoluteTop(), getOffsetWidth(), getOffsetHeight()));
                    optionsPanel.show();
                }
            }

(Bbox 类只是我可以用来包装坐标的便利类;为此编写您自己的类或 4 个方法)

然后主要工作在 PopupPanel 的onLoad() 覆盖中完成,其中按钮的坐标用于定位面板;

    @Override
    protected void onLoad() {
        super.onLoad();
        if (null == bounds) {
            super.hide();
        } else {
            left = (int) bounds.getX();
            top = (int) bounds.getMaxY();
            setPopupPosition(left, top);
        }
    }

(边界是按钮的坐标;getMaxY() == 按钮的底部坐标)

于 2012-04-30T07:25:57.157 回答