我基本上有1个名为ClueGame的课程,专门用于使用秋千绘画主要gui。

在此类中,我遍历BoardCell对象的列表,并从paintComponents(Graphics g)中调用boardcell.draw(g),后者将矩形绘制到板上。

但是,在完全不同的类WalkwayCell类(BoardCell的子类)中,我需要更新特定矩形的颜色。我在想像cell.updateColor()

但是很明显,我需要抽签才能做到这一点。我不知道如何更新板上的一个对象(矩形)的颜色,因为我没有图形对象,因此无法调用绘图。

希望这是有道理的。如果有人要求,我可以张贴代码。

最佳答案

您有许多选择...

你可以

ClueGame的引用传递到WalkwayCell的实例,然后这些实例将能够直接在repaint引用上调用ClueGame

问题是您将整个ClueGame类暴露给WalkwayCell的任何实例,这使他们可以做任何想做的事...

你可以

使用observer pattern,以允许ClueGame监视对WalkwayCell状态的更改

这意味着WalkwayCell并不在乎,它仅在对象状态更改时提供某种事件通知,并且不会将应用程序的某些部分暴露给其他无权知道的部分...

Swing的监听器API使用了观察者模式。您可以查看Writing Event Listeners以获得更多想法...

10-06 02:16