2

私は GWT と Web のことは初めてです。

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 があります。だから私はそれを無効にしました(後でそれも削除します)、ポップアップが一番上に来ません!まだウィジェットの後ろに隠れています。

popuppanel/dialogpanelを別の widget に追加する必要がないことを学びました。別の言い方をすれば、親にアタッチできないという意味では通常のウィジェットではありませんが、最上位にあることを保証するために dom にアタッチされます ( GWT コンポジット ウィジェットから) 。

私は機知に富んでいて、ここSOにいます...

アップデート

これが私のポップアップクラスです

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

私はまだウェブアプリに慣れていないので、問題の原因は非常にわかりにくいものでしたが、最終的には自分で解決しました。犯人はCSSです。次のコード行 1333 に見られるように、全体の z-index を非常に高く定義しています。

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

問題の Popup クラスのコメント アウトされたコード セグメントに見られるように、私は以前に z-index について疑問を持っていたので、わずかな値 3 で試してみました。コメントを外して 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

私は最近、呼び出し元に合わせる必要があるポップアップ パネル用の独自のソリューションを作成しました。このソリューションは、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 に答える
0

私の感覚では、「PopUp」オブジェクトの静的メソッドを使用するのは少し奇妙です...そのように、私は物事を呼び出し元オブジェクトではなくトップに相対的に考えています。

たぶん、クラスを「ポップアップ」にして「popupanel」を拡張し、呼び出しコードで作成することを検討できます

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