JMenuItem
具有下面的構造:(來源:GrepCode)JMenuItem的構造不接受行動
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
s或構造函數打交道時,它是不同的。有人可以解釋一下這個區別嗎?
爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –