覆盖SWT文本控件中的剪切/复制/粘贴

时间:2014-02-26 19:09:03

标签: java swt controls override copy-paste

覆盖Text控件的cut(),copy()和paste()方法的正确方法是什么?是什么触发了这些方法的执行?

我创建了一个带有自定义类的示例应用程序,它覆盖了这些方法。不幸的是,似乎没有任何东西可以执行这些被覆盖的方法,包括使用 Ctrl + X / Ctrl + C 的行为/ Ctrl + V 或从上下文菜单中选择剪切/复制/粘贴。

Example picture

自定义文字类:

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()方法。但是,这些方法根本不会触发。我的假设有问题吗?

0 个答案:

没有答案