Windows中SWT Text
的默认上下文菜单有几个我们不想要的选项。由于默认上下文菜单由操作系统提供且无法修改,因此我创建了一个自定义上下文菜单,其中仅包含基本文本操作,如文本框的删除,剪切,复制和粘贴。
现在的问题是,当我从另一个应用程序复制文本并尝试粘贴到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);
}
}
如您所见,我调用Text控件的复制和粘贴功能来执行操作。 在SWT中还有一种获取系统剪贴板的方法吗?
答案 0 :(得分:0)
要从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()
功能,看它是否有效