将ActionListener添加到JMenuItem

我刚刚开始了一个简单的GUI项目,在创建菜单栏时,我遇到了一个我发现无法解释的错误。 我想使用addActionListener将一个ActionListener添加到JMenuItem ,就像我过去所做的那样。 但是,当我应用所述方法时,Eclipse会给出一个错误:“令牌上的语法错误”addActionListener“,=此符号后的预期值。” 我唯一的想法是,也许addActionListener被解释为属性而不是方法……但我过去使用过这种方法,所以我知道它有效。 我不确定我应该提供多少代码,所以如果我想编辑更多,请告诉我。

 package com.movethehead; import javax.swing.JFrame; import javax.swing.SwingUtilities; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; @SuppressWarnings("serial") public class Main extends JFrame { private final int W = 500; private final int H = 500; JMenuBar menuBar = new JMenuBar(); JMenu file = new JMenu("File"); JMenuItem exitItem = new JMenuItem("Exit"); exitItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { System.exit(0); } }); JMenu headMenu = new JMenu("Heads"); JMenu bgMenu = new JMenu("Backgrounds"); public Main() { setTitle("Move the Head"); setSize(W, H); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); add(new Pnl()); setJMenuBar(menuBar); } // end constructor public static void main( String[] args ) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { Main f = new Main(); f.setVisible(true); } }); } // end main() } // end Main 

你看起来对我来说是什么

 JMenuBar menuBar = new JMenuBar(); JMenu file = new JMenu("File"); JMenuItem exitItem = new JMenuItem("Exit"); exitItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { System.exit(0); } }); JMenu headMenu = new JMenu("Heads"); 

在任何方法定义之外,没有办法调用该代码。

试试这个:

 public class Main extends JFrame{ //initialize integer height/width values along with declaring //Swing component variables private final int W = 500, H = 500; private JMenu file, headMenu, bgMenu; private JMenuBar menuBar; private JMenuItem exitItem; //constructor public Main(){ setTitle("Move the Head"); setSize(W, H); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); initializeElements(); } //Initializes the elements, this part is missing from your code above. public void initializeElements(){ menuBar = new JMenuBar(); file = new JMenu("File"); exitItem = new JMenuItem("Exit"); exitItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { System.exit(0); } }); headMenu = new JMenu("Heads"); bgMenu = new JMenu("Backgrounds"); } public static void main( String[] args ) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { Main f = new Main(); f.setVisible(true); } }); } } 

那段代码很好。 附近的一行可能存在语法错误,导致解析混乱。 要么是上一行,要么exitItem的声明。