ClipboardTrigger

ClipboardTrigger 是一个 facet,支持从界面组件中复制内容至系统剪切板。

组件的 XML 名称:clipboardTrigger

基本用法

ClipboardTrigger 在界面 XML 的 facets 元素定义,有如下属性:

1. input - 定义需要复制文本内容的组件 id。下列组件可以使用 ClipboardTrigger

2. button - 定义触发复制动作的 Button id

isSupportedByWebBrowser() 方法检查用户的浏览器是否支持内容复制。

示例:

<window xmlns="http://jmix.io/schema/ui/window"
        caption="msg://clipboardTriggerScreen.caption">
    <facets>
        <clipboardTrigger id="clipboardTrigger"
                          button="btn"
                          input="maskedField"/>
    </facets>
    <layout>
        <hbox spacing="true">
            <maskedField id="maskedField"
                         caption="Phone number"
                         mask="(###) ###-##-##"/>
            <button id="btn"
                    caption="Copy"
                    align="BOTTOM_RIGHT"/>
        </hbox>
    </layout>
</window>
@Autowired
private Notifications notifications;
@Autowired
private ClipboardTrigger clipboardTrigger;

@Subscribe("btn")
public void onBtnClick(Button.ClickEvent event) {
    if (clipboardTrigger.isSupportedByWebBrowser()) {
        notifications.create()
                .withCaption("Phone number was copied to clipboard")
                .show();
    } else {
        notifications.create()
                .withCaption("The phone number is not copied, because your " +
                        "browser does not support this functionality")
                .show();
    }
}

事件和处理器

如需使用 Jmix Studio 生成处理器的桩代码,需要在界面 XML 描述或者 Component Hierarchy 面板选中 facet 元素,然后用 Component Inspector 面板的 Handlers 标签页生成。

或者可以使用界面控制器顶部面板的 Generate Handler 按钮。

CopyEvent

此事件在用户点击 ClipboardTrigger 关联的按钮时发送,事件有以下方法:

  • isSuccess() - 如果文本内容成功复制到客户端的剪贴板,则返回 true

  • getSource() - 返回产生该事件的 ClipboardTrigger 对象。

@Subscribe("clipboardTrigger")
public void onClipboardTriggerCopy(ClipboardTrigger.CopyEvent event) {
    if (event.isSuccess()) {
        notifications.create()
                .withCaption("Text was successfully copied to clipboard")
                .show();
    } else {
        notifications.create()
                .withCaption("Something went wrong during copying")
                .show();
    }
}

如需以编程的方式注册事件处理器,使用 facet 的 addCopyListener() 方法。

XML 属性

可以在 Studio 界面设计器中的 Component Inspector 面板查看和编辑 facet 支持的属性。