需要 addMouseListener 和标识符

addMouseListener and identifier expected

我和我的搭档试图为实验室制作退出按钮,但我们无法弄清楚为什么它会出现标识符预期错误。

import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import java.awt.event.ActionListener;

public class EnterExitListener extends JFrame
{
    public static void main(String [] args)
{
  JFrame frame=new JFrame();
  final int FRAME_WIDTH=500;
  final int FRAME_HEIGHT=600;
  frame.setSize(FRAME_WIDTH,FRAME_HEIGHT);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setVisible(true);   

  class MouseEnterExitListener implements MouseListener
  {
      public void mouseEntered(MouseEvent event)
      {
          System.out.println("ENTER");
          frame.setBackground(Color.BLUE);
      }
      public void MouseExited(MouseEvent event)
      {
          System.out.println("EXIT");
          frame.setBackground(Color.RED);
      }  
      public void mouseReleased(MouseEvent event) {}
      public void mouseClicked(MouseEvent event) {}
      public void mousePressed(MouseEvent event) {} 

      MouseListener listener=new MouseListener();
      frame.addMouseListener(listener);   
   }
   }
}

如果我尝试编译这段代码,它会出现这个错误

EnterExitListener.java:34: error: <identifier> expected
EnterExitListener.addMouseListener(listener);   
                                  ^
EnterExitListener.java:34: error: <identifier> expected
EnterExitListener.addMouseListener(listener);   
                                           ^

第 34 行 frame.addMouseListener(listener); 当前是您内部 class 定义的一部分。您此时无法进行方法调用。

import java.awt.Color; // added import
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import java.awt.event.ActionListener;

public class EnterExitListener extends JFrame
{
  public static void main(String [] args)
  {
    JFrame frame=new JFrame();
    final int FRAME_WIDTH=500;
    final int FRAME_HEIGHT=600;
    frame.setSize(FRAME_WIDTH,FRAME_HEIGHT);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);   

    class MouseEnterExitListener implements MouseListener
    {
        public void mouseEntered(MouseEvent event)
        {
            System.out.println("ENTER");
            frame.setBackground(Color.BLUE);
        }
        public void mouseExited(MouseEvent event) // lowercase 'm'
        {
            System.out.println("EXIT");
            frame.setBackground(Color.RED);
        }  
        public void mouseReleased(MouseEvent event) {}
        public void mouseClicked(MouseEvent event) {}
        public void mousePressed(MouseEvent event) {} 
    } // moved closing bracket

    MouseListener listener = new MouseEnterExitListener(); // instantiate class, not interface
    frame.addMouseListener(listener);   
  }
}