playColor=Color.red在Java中无法正常工作。

playColor=Color.red在Java中无法正常工作。,java,Java,我想做的是,当鼠标在绿色矩形上时,我希望绿色矩形变成红色,但它不会变成红色,即使输出显示playColor为红色。怎么会?代码如下: package game; import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; public class StartScreen implements Mouse

我想做的是,当鼠标在绿色矩形上时,我希望绿色矩形变成红色,但它不会变成红色,即使输出显示playColor为红色。怎么会?代码如下:

package game;

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

public class StartScreen implements MouseMotionListener {
    int mouseX, mouseY;
    Color playColor = Color.GREEN;

    public void drawStartScreen(Graphics g) {
        g.setColor(playColor);
        g.fillRect(200, 200, 100, 100);
        System.out.println(playColor);
    }

    @Override
    public void mouseDragged(MouseEvent me) { }

    @Override
    public void mouseMoved(MouseEvent me) {        
        mouseY = me.getYOnScreen();
        mouseX = me.getXOnScreen();
        isMouseover();
    }

    private void isMouseover() {

        System.out.println("x: " + mouseX + "y: " + mouseY);
        if (mouseX > 200 && mouseX < 300 && mouseY > 200 && mouseY < 300) {
            System.out.println(playColor);
            playColor = Color.RED;
        }
    }
}
打包游戏;
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseMotionListener;
公共类StartScreen实现MouseMotionListener{
int mouseX,mouseY;
颜色playColor=Color.GREEN;
公共空白绘图开始屏幕(图g){
g、 setColor(playColor);
g、 fillRect(200200100100);
System.out.println(playColor);
}
@凌驾
公共无效mouseDragged(MouseEvent me){}
@凌驾
public void mouseMoved(MouseEvent me){
mouseY=me.getYOnScreen();
mouseX=me.getXOnScreen();
isMouseover();
}
私密的{
System.out.println(“x:+mouseX+”y:+mouseY);
如果(鼠标>200&&mouseX<300&&mouseY>200&&mouseY<300){
System.out.println(playColor);
playColor=Color.RED;
}
}
}

您正在将变量设置为红色,而不是矩形。您需要在矩形上再次调用
setColor

您只是将变量设置为红色,但这不会将矩形的颜色更改为红色。为了实现这一点,您必须在矩形面板上再次调用
setColor
方法:

playColor = Color.RED;
drawStartScreen(g);

您只是在更改一个变量值。如果要再次绘制窗口,则需要通过调用
repaint()
强制系统进行绘制。在我的类extensedcanvas中,它不断地进行重新绘制。它是每100毫秒重新绘制一次,所以你得到的是绿色还是红色,每秒打印10次?但是它不应该将playColor更改为红色及其setColor(playColor)那么为什么不工作呢?@user1776707你确定在你更改
playColor
的值后会调用带有
setColor(playColor)
的行吗?如果是这样,你怎么知道呢?在设置颜色变量后,需要重新绘制或重新绘制rect。。。仅仅设置一个变量本身没有作用于图形对象。在代码中的那个点上,你从哪里可以得到有效的图形
g
?@DNA:我不知道,因为我不知道
StartScreen
的使用上下文。我只能看到它是
MouseMotionListener
的一个实现,它与
java.awt.Graphics
无关。