如何在Java中的ZK中的Messagebox.show中创建超链接?

时间:2017-05-04 11:10:47

标签: java messagebox zk

在我使用Java的ZK项目中,我需要显示一个消息框,其中需要有一个超链接,用户可以从中打开另一个网页。

我怎样才能做到这一点?

1 个答案:

答案 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,错误级别指示器,几个要选择的按钮,以及一个专门的监听器来监听这些按钮。