在我使用Java的ZK项目中,我需要显示一个消息框,其中需要有一个超链接,用户可以从中打开另一个网页。
我怎样才能做到这一点?
答案 0 :(得分:0)
根据the documentation,MessageBox的定制相当有限。通过MessageBox.setTemplate()
完全更改UI是可能的,但这会影响所有MessageBox。
在我们的项目中,我们将zk的默认MessageBox替换为我们自己的,它更像是一个对话框。有了这个,我们就可以完全控制对话框的内容。
public abstract class OurDialog
{
private Window window;
private DialogListener closeListener;
public OurDialog(String title)
{
window = new Window();
window.setTitle(title);
window.setHflex("min");
window.setSizable(false);
window.setPosition("center");
window.setContentStyle("overflow: auto");
window.addEventListener(Events.ON_CLOSE, new EventListener<Event>()
{
@Override
public void onEvent(Event event)
throws Exception
{
if (closeListener != null)
{
if ("confirmed".equals(event.getData()))
{
closeListener.onClose(OurDialog.this);
if (!closeListener.onCloseConfirmation(OurDialog.this))
{
event.stopPropagation();
}
}
else
{
closeListener.onCancel(OurDialog.this);
if (!closeListener.onCancelConfirmation(OurDialog.this))
{
event.stopPropagation();
}
}
}
}
});
}
public final void setWidth(int width)
{
if (width != 0)
{
window.setMinwidth(width);
window.setWidth(width + "px");
}
else
{
window.setHflex("min");
}
}
public final void setHeight(int height)
{
if (height != 0)
{
window.setMinheight(height);
window.setHeight(height + "px");
}
else
{
window.setVflex("min");
}
}
public final void close()
{
Events.sendEvent(Events.ON_CLOSE, window, "confirmed");
}
public final void cancel()
{
Events.sendEvent(Events.ON_CLOSE, window, "cancelled");
}
/**
* @param closeListener called when the dialog is closed.
*/
public final void show(DialogListener closeListener)
{
setCloseListener(closeListener);
window.appendChild(getContent());
GUIHelper.setFocusToFirstInput(window);
OurMeatApplication.getCurrent().showDialog(this);
}
/**
* @return the component to be displayed in the dialog.
*/
protected abstract Component getContent();
}
我们的主应用程序类(OurApplication)具有对页面的引用并提供显示对话框的方法:
final void showDialog(final OurDialog dialog)
{
Window window = dialog.getWindow();
window.setParent(page);
window.doModal();
}
这是一个非常通用的对话框实现,几乎可以用于任何目的。对于特定的MessageBox案例,我们有一个子类,它提供准备好的UI,错误级别指示器,几个要选择的按钮,以及一个专门的监听器来监听这些按钮。