覆盖Text控件的cut(),copy()和paste()方法的正确方法是什么?是什么触发了这些方法的执行?
我创建了一个带有自定义类的示例应用程序,它覆盖了这些方法。不幸的是,似乎没有任何东西可以执行这些被覆盖的方法,包括使用 Ctrl + X / Ctrl + C 的行为/ Ctrl + V 或从上下文菜单中选择剪切/复制/粘贴。
自定义文字类:
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
public class TextCopyable extends Text{
public TextCopyable(Composite parent, int style) {
super(parent, style);
}
@Override
public void checkSubclass() {
}
@Override
public void cut() {
System.out.println("Cut!");
}
@Override
public void copy() {
System.out.println("Copy!");
}
@Override
public void paste() {
System.out.println("Paste!");
}
}
测试外壳:
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.layout.GridData;
public class CopyPasteTest extends Shell {
private TextCopyable text;
public static void main(String args[]) {
try {
Display display = Display.getDefault();
CopyPasteTest shell = new CopyPasteTest(display);
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public CopyPasteTest(Display display) {
super(display, SWT.SHELL_TRIM);
createContents();
}
protected void createContents() {
setText("SWT Application");
setSize(450, 300);
GridLayout gridLayout = new GridLayout();
setLayout(gridLayout);
text = new TextCopyable(this, SWT.BORDER);
text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
}
@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
}
我的期望是,只要我使用 Ctrl + C 命令从文本框中复制文本,就会调用copy()方法。但是,这些方法根本不会触发。我的假设有问题吗?