mouseEntered将不会执行

时间:2013-03-17 03:21:15

标签: java swing awt mouselistener

我正在尝试使用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();
    }
}

2 个答案:

答案 0 :(得分:3)

您实际上并未覆盖MouseAdapter的{​​{1}}方法,您需要

@Override
public void mouseEntered(MouseEvent e) {

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


附注:

  • 请勿使用mouseExited - 始终使用null layout
  • 对于自定义绘画覆盖paintComponent而不是paint
  • Java命名约定表明所有变量都以小写字母开头,这将使变量MouseEntered mouseEntered

答案 1 :(得分:1)

您已使用大写字母M在代码中启动了mouseEntered方法。将其更改为小写m。