0

我正在尝试进行 mouseEntered 测试以更改方形颜色,但是 MouseListener mouseEntered 不会执行。鼠标有响应,但仅响应单击、按下和释放。所以我不确定发生了什么。我希望你能帮我指出我的问题谢谢。

//Class
class RectangleClass extends JPanel{
    private int height;
    private int width;
    private boolean MouseEntered= false;
    private boolean MouseExit= false;
    private JPanel myPanel = new JPanel();
//Inner class with mouse Event
    class RectangleAdapter extends MouseAdapter{

        public void MouseEntered(MouseEvent e){
            System.out.println("MouseEntered"); 
            MouseEntered = true;
            repaint();
        }

        public void MouseExited(MouseEvent e){
            System.out.println("MouseExited");  
            MouseExit = true;
            repaint();
        }

    }
//constructor
    public RectangleClass(int height,int width){

        myPanel = this;
        this.height=height;
        this.width=width;
        this.addMouseListener(new RectangleAdapter());
    }
//paint graphic
    public void paint(Graphics g){
        super.paint(g);
        g.clearRect(0, 0, width, height);
        g.drawRect(0, 0, width, height);
        g.setColor(Color.YELLOW);

        if (MouseEntered){
            g.setColor(Color.CYAN);
            MouseEntered= false;
        }
        if (MouseExit){
            g.setColor(Color.orange);
            MouseExit= false;
        }
        g.fillRect(0, 0, width, height);
    }
}

public class RectangleContainer extends JFrame{

    public RectangleContainer(){
        setLayout(null);
        JPanel myPanel = new RectangleClass(100,100);
        myPanel.setBounds(50, 50, 200, 200);
        setSize(200,200);
        add(myPanel);
        setVisible(true);
    }

    public static void main(String args[]){
        new RectangleContainer();
    }
}
4

2 回答 2

3

你实际上并没有覆盖mouseEntered的方法MouseAdapter,你需要

@Override
public void mouseEntered(MouseEvent e) {

添加@Override将使编译器检查您是否覆盖了正确的方法。这同样适用于mouseExited BTW。


旁注:

  • 不要使用null布局- 始终使用布局管理器
  • 对于自定义绘画覆盖paintComponent而不是paint
  • Java 命名约定表明所有变量都以小写字母开头,这将使变量MouseEntered mouseEntered
于 2013-03-17T03:23:48.950 回答
1

您已mouseEntered在代码中以大写 M 开始该方法。将其更改为小写 m。

于 2013-03-17T03:26:33.017 回答