我是GWT和网络新手。
我正在尝试使用弹出/对话框。弹出窗口和对话框始终显示在窗口小部件后面。我一直在谷歌搜索,我找到的最相关的是这个 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)
我在我的机智结束,我在这里... ...
更新
这是我的Popup类
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();
}
});
以下是Popup
答案 0 :(得分:3)
由于我还是网络应用的新手,问题的根源一直很难以实现,但是,我终于自己解决了这个问题。罪魁祸首是CSS。它将整个事物的z-index定义为相当高,如下面的代码行1333所示。
我之前对z-index表示怀疑并尝试使用微不足道的值3,如所讨论的Popup类的注释掉的代码段所示。我必须取消注释并将其设置为101。
DOM.setIntStyleAttribute(simplePopup.getElement(), "zIndex", 101);
我知道,#$%#@#$ *。
答案 1 :(得分:1)
z-index仅决定哪个小部件应显示在顶部.. 小部件弹出窗口在benath下可能有z-index值高。
为弹出通过css设置z-index(推荐)或DOM将为你工作
答案 2 :(得分:0)
根据我的感觉,使用“PopUp”对象的静态方法有点奇怪...... 通过这种方式,我认为事物相对于顶部而不是调用者对象。
也许你可以考虑让你的班级'Popup'扩展'popupanel' 在你的调用代码中,只需制作
new PopUp(msg,left,top).show() ;
答案 3 :(得分: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()==按钮的底部坐标)