2012-04-09 60 views
3

我是GWT和网络新手。popuppanel在小部件下面显示

我基于 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它不提供任何答案。无论如何,我有第三方库,bst-player 1.3,它使用flash。所以我禁用了它(后来删除它),弹出窗口不会到达顶部!它仍然隐藏在小部件后面。

我了解到popuppanel/dialogpanel有do not need to get added to another widget。一种不同的说法是,它不是一个常规的小部件,它不能附加到父项,但它将自己附加到dom上以保证处于顶端(从GWT composite widget

我在我的智慧结束和我在这里以SO ...

UPDATE

这里是我的弹出类

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(); 

    } 
}); 

以下是弹出窗口如何在下的小部件。 enter image description here

+0

如果你要downvote或关闭,请解释原因。 – 2012-04-09 15:39:55

+0

可能是因为您应该显示导致问题的代码,而不仅仅是关于项目的一些常规信息。 – Strelok 2012-04-10 01:14:04

+0

我已经在code.google.com中包含了项目,这是我的项目所依据的,并且没有太大的偏差。 – 2012-04-10 01:25:54

回答

3

问题的根源已经十分困难的,因为我还是新来的webapp,但是,我终于自己解决了。罪魁祸首是CSS。它定义了整个事情的出现在下面的代码行1333

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

我都怀疑绕z索引之前和尝试用微不足道的值3相当高的z-index如所讨论的Popup类的注释代码段所示。我必须取消它的注释并将其设置为101.

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

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

0

根据我的感觉,使用“弹出”对象的静态方法是有点怪...... 这样一来,我想的东西相对的顶部,而不是调用者的对象。

也许你可以考虑让你的类“弹出”“延伸popupanel” 和调用代码,只要

new PopUp(msg,left,top).show() ; 
+0

nope。只是尝试从静态更改为标准的Java类。 – 2012-04-10 09:45:49

1

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

设置的z-index适用于透过CSS弹出(recomended)或DOM会为你工作

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(); 
       } 
      } 

(该B-盒类只是一个方便的类,我可以使用的包装坐标;写自己的类或4种方法对这个问题)

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

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

(范围是按钮的坐标; getMaxY()==按钮的底部坐标)