从另一个类强制重绘 - Swing

时间:2013-11-01 01:40:19

标签: java eclipse swing

我基本上有一个名为ClueGame的课程,专门用摇摆画来绘制主要的gui。

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

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

这样的东西

但显然我需要得到一些方法。我不知道如何更新板上一个对象(矩形)的颜色,因为我没有调用绘图,因为我没有图形对象。

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

2 个答案:

答案 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文章中通过一个工作示例更详细地解释了这个概念。