文本组件中的 CCP

如果要使用 Swing 文本组件之一(文本字段,密码字段,带格式的文本字段或文本区域)实现剪切,复制和粘贴,则工作非常简单。这些文本组件利用DefaultEditorKit提供了用于剪切,复制和粘贴的内置操作。默认的编辑器工具包还可以处理记住哪个组件最后成为焦点的工作。这意味着,如果用户使用菜单或等效的键盘启动这些操作之一,则正确的组件将收到该操作-不需要其他代码。

下面的演示TextCutPaste包含三个文本字段。从屏幕快照中可以看到,您可以在任何这些文本字段中剪切,复制和粘贴。它们还支持拖放。

TextCutPaste 演示的快照。

Try this:

  • 单击启动按钮以使用Java™Web 开始(下载 JDK 7 或更高版本)运行TextCutPaste。另外,要自己编译和运行示例,请查阅example index

  • 在文本字段之一中选择文本。使用“编辑”菜单或等效的键盘从源中剪切或复制文本。

  • 将插入符放置在要粘贴文本的位置。

  • 使用菜单或等效的键盘粘贴文本。

  • 使用拖放执行相同的操作。

这是通过将DefaultEditorKit中定义的内置剪切,复制和粘贴动作挂接到菜单项来创建“编辑”菜单的代码。这适用于任何从JComponent继承的组件:

/**
     * Create an Edit menu to support cut/copy/paste.
     */
    public JMenuBar createMenuBar () {
        JMenuItem menuItem = null;
        JMenuBar menuBar = new JMenuBar();
        JMenu mainMenu = new JMenu("Edit");
        mainMenu.setMnemonic(KeyEvent.VK_E);

        menuItem = new JMenuItem(new DefaultEditorKit.CutAction());
        menuItem.setText("Cut");
        menuItem.setMnemonic(KeyEvent.VK_T);
        mainMenu.add(menuItem);

        menuItem = new JMenuItem(new DefaultEditorKit.CopyAction());
        menuItem.setText("Copy");
        menuItem.setMnemonic(KeyEvent.VK_C);
        mainMenu.add(menuItem);

        menuItem = new JMenuItem(new DefaultEditorKit.PasteAction());
        menuItem.setText("Paste");
        menuItem.setMnemonic(KeyEvent.VK_P);
        mainMenu.add(menuItem);

        menuBar.add(mainMenu);
        return menuBar;
    }

接下来,我们将研究如何使用不具有DefaultEditorKit内置支持的组件来实现相同的功能。