我基本上有一个名为ClueGame的课程,专门用摇摆画来绘制主要的gui。
在这个类中,我遍历一个BoardCell对象列表,并从paintComponents(Graphics g)中调用boardcell.draw(g),它将矩形绘制到板上。
然而,在一个完全不同的类中,WalkwayCell类(BoardCell的一个孩子),我需要更新特定矩形的颜色。我在想像cell.updateColor()
这样的东西但显然我需要得到一些方法。我不知道如何更新板上一个对象(矩形)的颜色,因为我没有调用绘图,因为我没有图形对象。
希望这是有道理的。如果有人要求,我可以发布代码。
答案 0 :(得分:3)
您有多种选择......
将ClueGame
的引用传递给WalkwayCell
的实例,这些实例可以直接在repaint
引用上调用ClueGame
。
这个问题是你将整个ClueGame
类暴露给WalkwayCell
的实例,这允许他们做任何他们想做的事情......
使用observer pattern,允许ClueGame
监控对WalkwayCell
的状态的更改
这意味着WalkwayCell
并不真正关心,它只会在对象状态发生变化时提供某种事件通知,并且不会将应用程序的某些部分暴露给其他部分无权了解......
Swing使用它的侦听器API的观察者模式。您可以查看Writing Event Listeners以获取更多想法......
答案 1 :(得分:2)
创建Swing GUI时,创建GUI模型类很重要。模型类包含GUI的数据。拥有模型类使得对Swing视图类的编码变得更加简单。
在您的情况下,您将使用像您建议的类似cell.updateColor()的方法更改WalkwayCell类实例的状态。首先,更新模型实例。然后在视图上绘制模型实例。
我在Hangman Swing GUI文章中通过一个工作示例更详细地解释了这个概念。