2012-05-30 2 views
0

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 или конструкторами. Может ли кто-нибудь объяснить разницу?

+0

Для более эффективной помощи, отправьте сообщение [SSCCE] (http://sscce.org/). –

ответ

3

Похоже на то, что вы опубликовали, что вы не определили свое действие при инициализации JMenuItem. Поэтому, поскольку вы проходите нулевое значение, никакое действие не запускается

1

someButton инициализирован до someAction, поэтому вы передаете значение null в JMenuItem. Инициализируйте someButton после того, как вы создали someAction, и все будет хорошо.

Смежные вопросы