gpt4 book ai didi

java - 启用跨不同应用程序的复制/粘贴

转载 作者:行者123 更新时间:2023-11-29 08:47:54 27 4
gpt4 key购买 nike

Windows 中 SWT Text 的默认上下文菜单有几个我们不想要的选项。由于操作系统提供的默认上下文菜单无法修改,因此我创建了一个自定义上下文菜单,其中只有基本的文本操作,例如文本框的删除、剪切、复制和粘贴。

Custom Text context Menu

现在的问题是,当我从另一个应用程序复制文本并尝试粘贴到 TextBox 时,粘贴似乎不起作用。但是当我们在应用程序本身内复制/剪切文本时它会起作用。

这里是复制粘贴的代码。粘贴操作:

private class PasteActionHandler extends Action {

/** Creates a new instance. */
private PasteActionHandler() {
...
setEnabled(false);
}

@Override
public void runWithEvent(Event event) {
if (activeTextControl != null && !activeTextControl.isDisposed()) {
activeTextControl.paste();
updateActionsEnableState();
return;
}
}

/**
* Updates the state of the Paste Action.
*/
public void updateEnabledState() {
if (activeTextControl != null && !activeTextControl.isDisposed()) {
boolean canPaste = false;
if (activeTextControl.getEditable()) {
Clipboard clipboard = new Clipboard(activeTextControl.getDisplay());
TransferData[] td = clipboard.getAvailableTypes();
for (int i = 0; i < td.length; ++i) {
if (TextTransfer.getInstance().isSupportedType(td[i])) {
canPaste = true;
break;
}
}
clipboard.dispose();
}
setEnabled(canPaste);
return;
}
setEnabled(false);
}
}

复制操作:

private class CopyActionHandler extends Action {

private CopyActionHandler() {
...
setEnabled(false);
}

@Override
public void runWithEvent(Event event) {
if (activeTextControl != null && !activeTextControl.isDisposed()) {
activeTextControl.copy();
updateActionsEnableState();
return;
}
}

/**
* Updates the state of the {@link Action}.
*/
public void updateEnabledState() {
if (activeTextControl != null && !activeTextControl.isDisposed()) {
setEnabled(activeTextControl.getSelectionCount() > 0);
return;
}
setEnabled(false);
}
}

如您所见,我调用了文本控件的复制和粘贴函数来执行这些操作。SWT 中还有获取系统剪贴板的方法吗?

最佳答案

要从 SWT 复制剪贴板中的内容,我使用代码:

    String textData = textControl.getText();
if (textData.length() > 0) {
org.eclipse.swt.dnd.Clipboard cb = new org.eclipse.swt.dnd.Clipboard(display);
org.eclipse.swt.dnd.TextTransfer textTransfer = org.eclipse.swt.dnd.TextTransfer.getInstance();
cb.setContents(new Object[]{textData}, new Transfer[]{textTransfer});
}

您可以尝试使用 activeTextControl.copy() 函数,看看它是否有效

关于java - 启用跨不同应用程序的复制/粘贴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24199047/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com