我正在编写的记事本程序对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);
}
}
我如何在抽象动作中使用剪切动作?
答案 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教程中的部分,了解更多信息和示例。