根据 mouseEntered 和 mouseExited 更改组件的状态

Change components' state base on mouseEntered and mouseExited

我是 Java 的新手,正在尝试学习 GUI Swing 框架。

我的目标是创建一个可以睁眼和闭眼的人脸组件 - 取决于鼠标状态(输入:睁眼,退出:闭眼)

我被结构卡住了,不知道如何将面部组件连接到 MouseListener

感谢对代码的任何反馈和更好地学习的建议。谢谢!

  1. 创建一个 class 来完成面部(眼睛、鼻子、嘴巴等)的所有自定义绘画。

  2. 将此面板添加到框架中。

在此面板中,您可以创建两个实例变量来表示眼睛:

private Shape leftEye = new Rectangle(170, 180, 70, 90);
private Shape rightEye = new Rectangle(320, 180, 70, 90);

还有两个变量来表示每只眼睛的状态:

private boolean isLeftEyeOpen;
private boolean isRightEyeOpen;

创建更新每只眼睛状态的方法:

public void setLeftEyeOpen(boolean isLeftEyeOpen)
{
    this.isLeftEyeOpen = isLeftEyeOpen;
}

将您的 MouseListener 添加到此面板并监听 mouseMoved() 事件(不是 mouseEntered 和 mouseExited)。然后你设置每个变量的状态:

setLeftEyeOpen( leftEye.contains(e.getPoint() );
setRightEyeOpen( rightEye.contains(e.getPoint() );
repaint();

那么绘画代码中有:

if (isLeftEyeOpen)
    //  paint eye open
else
    //  paint eye closed.

阅读 Swing 教程中关于 Custom Painting 的部分,获取有助于构建代码的基本示例。