Java .intersects()方法仅适用于某些示例

Java .intersects()方法仅适用于某些示例,java,jpanel,intersection,Java,Jpanel,Intersection,我正在写一个简单的程序,当两个矩形相交时应该显示“相交”。出于某种原因。。。这与我使用的代码不兼容。这是我的密码: import java.awt.Color; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import javax.swing.JPanel; public cla

我正在写一个简单的程序,当两个矩形相交时应该显示“相交”。出于某种原因。。。这与我使用的代码不兼容。这是我的密码:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JPanel;

public class Game extends JPanel implements MouseMotionListener {
int rectX;
int rectY;
Rectangle rect1;
Rectangle rect2;

public Game() {
    rect1 = new Rectangle(rectX, rectY, 20, 20);
    rect2 = new Rectangle(250, 250, 50, 50);
    rectX = 150;
    rectY = 150;
    setBackground(Color.ORANGE);
    addMouseMotionListener(this);
}

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (rect1.intersects(rect2)) {
        g.drawString("Intersecting", 75, 75);
    } else {
        g.drawString("Not Intersecting", 75, 75);
    }

    g.setColor(Color.GREEN);
    g.fillRect(rect2.x, rect2.y, rect2.width, rect2.height);
    g.setColor(Color.BLUE);
    g.fillRect(rectX, rectY, rect1.width, rect1.height);

    repaint();
}

@Override
public void mouseDragged(MouseEvent e) {
    rectX = e.getX();
    rectY = e.getY();
}

@Override
public void mouseMoved(MouseEvent e) {
    rectX = e.getX();
    rectY = e.getY();

}
}
import java.awt.EventQueue;

import javax.swing.JFrame;

public class Main {

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

public Main() {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {

            JFrame frame = new JFrame("Game");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new Game());
            frame.setSize(500, 500);
            frame.setVisible(true);
        }
    });
}
}
但出于某种原因,此代码确实有效:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;

public class Main extends JFrame{

private Image dbImage;
private Graphics dbg;

int rectX, rectY;

public Main(){
    setSize(400,300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);
    setVisible(true);
    addMouseMotionListener(new AL());
}




public void paint(Graphics g){
    dbImage = createImage(getWidth(), getHeight());
    dbg = dbImage.getGraphics();
    paintComponent(dbg);
    g.drawImage(dbImage, 0, 0, this);

}

public void paintComponent(Graphics g) {
    g.setColor(Color.BLACK);

    Rectangle r1 = new Rectangle(rectX, rectY, 25, 25);
    Rectangle r2 = new Rectangle(175, 175, 50, 50);
    g.fillRect(r2.x, r2.y, r2.width, r2.height);
    g.fillRect(r1.x, r1.y, r1.width, r1.height);
    if(r1.intersects(r2)){
        g.drawString("HIT", 175, 140);
    }
    repaint();
}

public class AL extends MouseAdapter {
    public void mouseMoved(MouseEvent e){
        rectX = e.getX()-12;
        rectY = e.getY()-12;
    }
}

public static void main(String[] args){
    Main main = new Main();
}   
}

有谁能向我解释一下两者的区别,以及为什么一个有效而另一个无效?谢谢。

在构建对象后,您不会更改
rect1
rect2
对象的值。为什么你认为它们应该相交?@realpoint我不是在mouseMoved()方法中更改矩形的x和y吗?我可能会错过一些东西,总体而言,我还是一个经验极其缺乏的程序员在第二个示例中,您将在每次绘制组件调用时创建一个新的rect,使用rectX和rectY作为rect位置。在第一个例子中,您并不是每次绘制调用都创建它,但我看不到您正在移动矩形的位置。是的,当鼠标移动时,您正在更改rectX和rectY,但在第一个示例中,您从未使用这些变量设置rect的位置,仅在初始化过程中设置。@user好的,那么您建议如何修复?如果我的代码不必在每次绘制JPanel时都创建一个新的矩形,我会更喜欢它,但如果有必要,我会这样做。你唯一需要做的就是改变矩形的位置。每当更改这些值时,将rect1.x设置为rectX,将rect1.y设置为rectY