Java 替代SWT文本控件中的剪切/复制/粘贴
覆盖文本控件的cut()、copy()和paste()方法的正确方法是什么?是什么触发了这些方法的执行 我创建了一个示例应用程序,其中包含一个覆盖这些方法的自定义类。不幸的是,似乎没有执行这些重写的方法,包括使用Ctrl+X/Ctrl+C/Ctrl+V或从上下文菜单中选择剪切/复制/粘贴 自定义文本类:Java 替代SWT文本控件中的剪切/复制/粘贴,java,swt,controls,overriding,copy-paste,Java,Swt,Controls,Overriding,Copy Paste,覆盖文本控件的cut()、copy()和paste()方法的正确方法是什么?是什么触发了这些方法的执行 我创建了一个示例应用程序,其中包含一个覆盖这些方法的自定义类。不幸的是,似乎没有执行这些重写的方法,包括使用Ctrl+X/Ctrl+C/Ctrl+V或从上下文菜单中选择剪切/复制/粘贴 自定义文本类: import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; public class Tex
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()方法。但是,这些方法根本不会触发。我的假设是错误的吗?这对我来说在Mac上是可行的,因为SWT使用本机控件,不同平台的行为可能会有所不同。顺便说一句:你在玩一个危险的游戏,对SWT控件进行分类。。。但是我想你知道的。@Baz也许我不太熟悉我应该害怕什么。。。你推荐什么?“我在这里做的事不实际吗?”左撇子读道。它在官方的EclipseSWTFAQ中。我并不是说不应该将SWT控件子类化,但您肯定应该知道为什么不推荐使用它。@Baz我明白了。。。嗯,这些看起来并不坏。听起来这主要是关于可移植性。我们在这里为我们的用户管理并要求特定的OSs、Java版本等,因此兼容性不是一个大问题(因为我们完全同意我们的程序在我们已经使用的程序之外不可移植)。不管怎样,你对复制/粘贴有什么想法吗?有人声称这些方法是在某些操作系统上自动调用的,而不是在其他操作系统上?