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
или конструкторами. Может ли кто-нибудь объяснить разницу?
Для более эффективной помощи, отправьте сообщение [SSCCE] (http://sscce.org/). –