gpt4 book ai didi

java - JMenuItem 构造函数不接受操作

转载 作者:行者123 更新时间:2023-12-01 19:04:14 26 4
gpt4 key购买 nike

JMenuItem 具有以下构造函数:(来源: GrepCode )

public JMenuItem(Action a) {
this();
setAction(a);
}

但是,当我的代码有

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

public class ActionTest extends JApplet {

private final JFrame frame = new JFrame("Title");
private final JMenuBar menuBar = new JMenuBar();
private final JMenu fileMenu = new JMenu("File");
protected Action someAction;
private JMenuItem someButton = new JMenuItem(someAction);

public ActionTest() {}

@Override
public final void init() {
frame.setJMenuBar(menuBar);
menuBar.add(fileMenu);
fileMenu.add(someButton);
someButton.setText("Button");
someAction = new AbstractAction("Title") {

public void actionPerformed(ActionEvent event) {
//do stuff
}
};
frame.setVisible(true);
}

public static void main(String[] args) {
JApplet applet = new ActionTest();
applet.init();
}
}

当我按下JMenuItem时,actionPerformed()甚至没有被调用。

这是一个错误,还是我的方法完全错误?

经过更多研究,我发现 this是它最终归结为的方法。它似乎实现了浅复制,should simply point to the same memory block that I gave it in the constructor

当我将文件菜单添加到菜单栏时,应该会发生同样的事情。添加文件菜单时,它会引用内存块。该内存块内的内容就是显示的内容。然后,我添加菜单项,它会出现在 JMenu 中。

不知何故,当我处理 Action 或构造函数时,情况有所不同。有人能解释一下其中的区别吗?

最佳答案

从您发布的内容来看,您在初始化 JMenuItem 时似乎尚未定义操作。因此,由于您传入 null,因此不会触发任何操作

关于java - JMenuItem 构造函数不接受操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10824660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com