如何在AbstractAction中使用DefaultEditorKit

时间:2015-08-08 18:16:43

标签: java action

我正在编写的记事本程序对JMenuBar中的每个项目使用AbstractActions,我希望在整个代码中保持一致。现在我正在将Cut,Copy,Paste实现到程序中,但我不确定如何使用Action执行此操作。

import java.awt.*;
import java.awt.event.ActionEvent;

import javax.swing.*;
import javax.swing.text.DefaultEditorKit;

public class Home {
    static Action Cut = new AbstractAction("Cut-Action") {
        public void actionPerformed(ActionEvent e) {
            // Where I want to use cut
            new DefaultEditorKit.CutAction();
        }
    };

    static public JMenuBar createMenuBar() {
        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("Edit");

        menu.add(Cut); // Adds the cut action

        // adds the non-action method
        JMenuItem item = new JMenuItem(new DefaultEditorKit.CutAction());
        item.setText("Cut-NonAction");
        menu.add(item);

        menuBar.add(menu);
        return menuBar;
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Home");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JMenuBar menuBar = createMenuBar();
        frame.add(menuBar, BorderLayout.NORTH);

        JTextPane txt = new JTextPane();
        JScrollPane s = new JScrollPane(txt);

        frame.add(s, BorderLayout.CENTER);

        frame.setSize(400, 300);
        frame.setVisible(true);
    }
}

我如何在抽象动作中使用剪切动作?

2 个答案:

答案 0 :(得分:0)

我通过一些试验和错误想出来了。

我改变了这段代码:

public void actionPerformed(ActionEvent e) {
    new DefaultEditorKit().CutAction();
}

为:

public void actionPerformed(ActionEvent e) {
    Action cut = new DefaultEditorKit.CutAction();
    cut.actionPerformed(e);
}

答案 1 :(得分:0)

  

我如何在抽象动作中使用剪切动作?

你为什么要这样做?这不是使用编辑器工具包中的Actions的方法。

这是使用这些操作的正确方法:

JMenuItem item = new JMenuItem(new DefaultEditorKit.CutAction());

或者,如果您恰好需要在菜单和工具栏上使用CutAction,您可以使用以下代码:

Action cut = new DefaultEditorKit.CutAction();
cut.putValue(Action.NAME, "Cut");

JMenuItem cutMenuItem = new JMenuItem( cut );
JButton cutButton = new JButton( cut );

现在共享相同的Action,这意味着您可以启用/禁用Action,并且两个组件都将受到影响。阅读How to Use Actions上Swing教程中的部分,了解更多信息和示例。

相关问题