我基本上有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以获得更多想法...