Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mouseEntered将不会执行_Java_Swing_Awt_Mouselistener - Fatal编程技术网

Java mouseEntered将不会执行

Java mouseEntered将不会执行,java,swing,awt,mouselistener,Java,Swing,Awt,Mouselistener,我试图做一个mouseenternet测试来改变正方形的颜色,但是mouseenterner mouseenternet不会执行。鼠标有反应,但只对点击、按下和释放做出反应。所以我不确定到底发生了什么。我希望你能帮我指出我的问题,谢谢 //Class class RectangleClass extends JPanel{ private int height; private int width; private boolean MouseEntered= false;

我试图做一个mouseenternet测试来改变正方形的颜色,但是mouseenterner mouseenternet不会执行。鼠标有反应,但只对点击、按下和释放做出反应。所以我不确定到底发生了什么。我希望你能帮我指出我的问题,谢谢

//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();
    }
}

实际上,您并没有重写
MouseAdapter
的方法,您需要

@Override
public void mouseEntered(MouseEvent e) {
添加
@Override
将让编译器检查您是否重写了正确的方法。顺便说一句,这同样适用于美国


旁注:

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

    • 您实际上并没有重写
      MouseAdapter的方法,您需要

      @Override
      public void mouseEntered(MouseEvent e) {
      
      添加
      @Override
      将让编译器检查您是否重写了正确的方法。顺便说一句,这同样适用于美国


      旁注:

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


      您已经在代码中用大写字母M启动了
      鼠标插入的
      方法。将其更改为小写字母M。

      您已经在代码中用大写字母M启动了
      鼠标插入的
      方法。将其更改为小写字母M。

      公共无效绘制(图形g){
      不要覆盖
      绘制(…)
      JPanel
      中-它应该是
      paintComponent(图形)
      。并使用
      @Override
      符号检查该方法是否存在。这很有趣,我从未见过有人这样做。介意为我放一个示例代码吗?尝试修改它,如果需要,再问另一个问题。好的,谢谢你的提示。我理解你为什么使用paintComponent。谢谢安德鲁。
      公共无效绘制(图形g){
      不要在
      JPanel
      中重写
      paintComponent(..)
      -它应该是
      paintComponent(图形)
      。并使用
      @Override
      符号检查该方法是否存在。这很有趣,我从未见过有人这样做。介意为我放一个示例代码吗?尝试修改它,如果需要,再问另一个问题。好的,谢谢你的提示。我理解你为什么使用paintComponent谢谢安德鲁。我认为另一个答案更好呃(第一个&更完整)。我认为另一个答案更好(第一个&更完整)。哦,这是自动生成的,但eclipse现在将其删除。感谢您的建议。我发现很难相信eclipse自动生成了@Reimeus评论的任何代码。1)eclipse会编写正确的方法签名(可能使用
      @Override
      表示法。完成此操作后,方法名称的大小写将正确。2)Eclipse不会自动将布局设置为
      null
      ——那么你到底在责怪IDE什么呢?布局为null的部分是我做的,我想通过x和y位置自由设置面板。mouseEvent部分我不确定我是如何复制并错误地复制布尔名称的。“布局空白部分是我做的,我想通过x和y位置自由设置面板。"使用
      null
      布局将阻止您从简单的GUI发展到包含许多组件、动态添加组件、可调整大小、可以使用不同的PLAF等的GUI。了解如何结合布局构造函数中定义的间距使用布局,以及基于Swing的
      Border
      对象GUI的大小和形状都很可靠。我对GUI不是很在行,但我会研究并了解它。感谢自动生成的tipoh,但eclipse我现在将其删除。感谢您的建议。我发现很难相信eclipse自动生成了@Reimeus评论的任何代码。1)Eclipse将编写正确的方法签名(可能使用
      @Override
      表示法。完成此操作后,方法名称的大小写将正确。2)Eclipse不会自动将布局设置为
      null
      ——那么你到底在责怪IDE什么呢?布局为null的部分是我做的,我想通过x和y位置自由设置面板。mouseEvent部分我不确定我是如何复制并错误地复制布尔名称的。“布局空白部分是我做的,我想通过x和y位置自由设置面板。"使用
      null
      布局将阻止您从简单的GUI发展到包含许多组件、动态添加组件、可调整大小、可以使用不同的PLAF等的GUI。了解如何结合布局构造函数中定义的间距使用布局,以及基于Swing的
      Border
      对象图形用户界面的大小和形状都很可靠。我对图形用户界面不是很在行,但我会研究它并了解它。谢谢你的提示