繁体   English   中英

强制从另一个类重新粉刷-Swing

[英]Force repaint from another class - Swing

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

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

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

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

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

您有许多选择...

你可以

通过您的参考ClueGame到的实例WalkwayCell那么这将是能够调用的repaintClueGame直接参考。

这里的问题是,你暴露整个ClueGame类的实例过WalkwayCell ,这使得他们能够为所欲为吧...

你可以

使用观察者模式 ,允许ClueGame监测变化的状态WalkwayCell小号

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

Swing的监听器API使用了观察者模式。 您可以看一下编写事件监听器以了解更多想法...

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM