2012-04-09 50 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()==按鈕的底部座標)

相關問題