有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在AbstractAction中使用DefaultEditorKit

我正在编写的记事本程序对JMenuBar中的每一项都使用抽象操作,我希望在整个代码中保持一致。现在我在程序中实现剪切、复制和粘贴,但我不确定如何通过操作实现

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) 个答案

  1. # 1 楼答案

    How would I be able to use the cut action in my abstract action??

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

    这是正确使用动作的方法:

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

    或者,如果您碰巧需要菜单和工具栏上的剪切操作,您可以使用以下代码:

    Action cut = new DefaultEditorKit.CutAction();
    cut.putValue(Action.NAME, "Cut");
    
    JMenuItem cutMenuItem = new JMenuItem( cut );
    JButton cutButton = new JButton( cut );
    

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

  2. # 2 楼答案

    我通过一点点尝试和错误就弄明白了

    我更改了代码:

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

    致:

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