Java 替代SWT文本控件中的剪切/复制/粘贴

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

覆盖文本控件的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()方法。但是,这些方法根本不会触发。我的假设是错误的吗?

这对我来说在Mac上是可行的,因为SWT使用本机控件,不同平台的行为可能会有所不同。顺便说一句:你在玩一个危险的游戏,对SWT控件进行分类。。。但是我想你知道的。@Baz也许我不太熟悉我应该害怕什么。。。你推荐什么?“我在这里做的事不实际吗?”左撇子读道。它在官方的EclipseSWTFAQ中。我并不是说不应该将SWT控件子类化,但您肯定应该知道为什么不推荐使用它。@Baz我明白了。。。嗯,这些看起来并不坏。听起来这主要是关于可移植性。我们在这里为我们的用户管理并要求特定的OSs、Java版本等,因此兼容性不是一个大问题(因为我们完全同意我们的程序在我们已经使用的程序之外不可移植)。不管怎样,你对复制/粘贴有什么想法吗?有人声称这些方法是在某些操作系统上自动调用的,而不是在其他操作系统上?