微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从另一个类绘制对象到同一个 JFrame

如何解决从另一个类绘制对象到同一个 JFrame

我的代码运行了,但是在棋盘顶部看不到石头

this is what my output look like when I run my code

谁能帮帮我!!我的目标是让棋盘上的石头[就像游戏曼卡拉]

解决方法

正如 @camickr 在评论中所写,执行此操作的正常方法是让电路板组件绘制其中的内容。

在具有图形用户界面(以及其他)的程序中,您通常应该将绘画代码(视图)与知道要绘画的代码(视图)分开>模型)。这个想法叫做Model-View-Controller

在这里实现 MVC 意味着您的 Board 类应该知道要绘制什么,或如何绘制它,但不能同时知道两者。我建议有一个

  • BoardPainter extends JPanel,视图:知道如何自己绘制事物,对于石头可以到达的每个位置都有一个 StonePainter(它也扩展了 JPanel)。它保留关于在何处绘制什么的信息;相反,它会在每次需要时从 MancalaState 询问此信息。当游戏进一步进行时,您还会在此处生成动作:单击源,单击目标,
  • MancalaState 将是模型,它知道每个地方有多少颗石头,谁应该移动,决定游戏何时结束,等等。如果您在此处实现 toString(),您可以轻松测试整个游戏是否正常运行,无论它如何绘制。

要将锅 (StonePainters) 放置在 BoardPainter 中的正确位置,您可以使用现有的 LayoutManager(甚至嵌套 JPanel),编写自己的 {{ 1}},或者直接不使用 LayoutManager 并直接从您的 StonePainter 在正确的位置绘制它们。在我看来,最简单的选择是第一个:

BoardPainter

示例输出:

Sample output

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。