0

我基本上有一个名为 ClueGame 的类,专门用于使用 swing 绘制主 gui。

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

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

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

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

4

2 回答 2

3

你有任意数量的选择...

你可以

将您的引用传递给能够直接调用引用ClueGame的实例。WalkwayCellrepaintClueGame

这样做的问题是你将整个ClueGame类暴露给 的实例WalkwayCell,这允许他们做任何他们想做的事情......

你可以

使用观察者模式,允许sClueGame监视状态的变化WalkwayCell

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

Swing 将观察者模式用于其侦听器 API。您可以查看编写事件侦听器以获取更多想法...

于 2013-11-01T02:04:03.903 回答
2

创建 Swing GUI 时,创建 GUI 模型类很重要。模型类保存 GUI 的数据。拥有模型类使得编写 Swing 视图类变得非常简单。

在您的情况下,您将按照您的建议使用 cell.updateColor() 之类的方法更改 WalkwayCell 类的实例的状态。首先,您更新模型实例。然后在视图上绘制模型实例。

我在Hangman Swing GUI文章中通过一个工作示例更详细地解释了这个概念。

于 2013-11-01T08:19:42.370 回答