2012-04-09 4 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プレーヤー1.3を持っています。だから私はそれを無効にした(後でそれを削除する)、ポップアップはちょうどトップに来ません!それはまだウィジェットの後ろに隠れている。

私はpopuppanel/dialogpanel alikes do not need to get added to another widgetを学びました。別の言い方をすれば、それは親には付かないという意味では普通のウィジェットではなく、一番上にあることを保証するためにドームに取り付けられます(GWT composite widget

私はウィットエンドです私は

を呼び出していますどのように私はここで

は私のポップアップクラスここ

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

ある

UPDATE ... SOでここにされています3210

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に行くか、近くにいる場合は、理由を説明してください。 –

+0

おそらく、プロジェクトの一般的な情報だけでなく、問題の原因となっているコードを表示する必要があるからです。 – Strelok

+0

私は自分のプロジェクトが基にしていて、そこからあまり偏差がないcode.google.comにプロジェクトを含めました。 –

答えて

3

問題の原因を作り、「popupanel」 とあなたの呼び出し元のコードに伸びるあなたのクラスのポップアップ」を作る検討することもできは非常にとらえどころのないされていますwebapp、まだ、私は最終的にそれを自分で解決します。原因はCSSです。それは私が前にZインデックスについて疑ったと微々たる値3でそれを試してみてきた1333

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

次のコード行に見られるように、非常に高いと全体のことのためのzインデックスを定義しています問題のPopupクラスのコメントアウトされたコードセグメントに見られるように。コメントを外して101に設定する必要があります。

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

私は知っていましたが、#$%#@#$ *でした。

0

が私の感覚によると、あなたの「ポップアップ」オブジェクトの静的メソッドを使用すると、少し奇妙である...そのようにし は、私がトップではなく、呼び出し元オブジェクトに物事相対的だと思います。私はまだ新しいですので、

たぶん、あなただけの

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

ではありません。ちょうど静的Javaクラスから標準Javaクラスに変更しようとしました。 –

1

z-indexは、どのウィジェットが上に表示されるかを決定するだけです。 ウィジェットポップアップがベナ下にあると、Z-インデックス値が高くなる可能性があります。私は最近、その呼び出し元と一致する必要がポップアップパネルのための私自身の解決策を書いた

は(お奨め)CSSを通してポップアップ用のzインデックスを設定するか、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(); 
       } 
      } 

(にBboxクラスI座標を包むために使用できるだけの便利なクラスで、独自のクラスまたはそのことについては4つのメソッドを書く)

主な仕事は、その後のonLoad(で行われます) PopupPanelのoverrideをオーバーライドします。ここでは、ボタンの座標を使用してパネルを配置します。

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

(境界がボタンの座標である; getMaxY()は==下のボタンの座標)

関連する問題