【问题标题】:MVC-design and displaying arrays using Swing/Graphics in Java在 Java 中使用 Swing/Graphics 设计和显示数组
【发布时间】:2011-01-11 04:21:02
【问题描述】:

我正在开发一个小型国际象棋游戏,我认为我几乎完成了基本模型并准备开始编写 GUI。

我一直想知道的是,如果棋盘由 [8][8] 的 Square 数组表示,我创建了一个方法来绘制一个正方形并以某种方式建立该方法之间的关系和 Square 模型,然后我会神奇地拥有一个视觉棋盘吗?

我的意思是,假设一个正方形是 10x10 像素,这是否意味着第一个元素(由正方形表示)将从 (0, 0) 开始,元素二从 (10, 0) 开始,元素/正方形九在(0, 10) 等? 签出 Graphics2D 时发现绘制矩形的方法需要 x 和 y 坐标,如果我希望位置依赖于数组元素该怎么办?

或者我必须在棋盘上写下每个方格的坐标?

一直困扰我的另一件事是是[row][column]还是[column][row]? 我一直在我的代码中使用 [column][row],因为如果您将其视为 (x, y),它似乎是正确的。 当您上下移动时,您会更改行、= y 等。

我一直在尝试用谷歌搜索,以了解如何应用 MVC 设计、思考什么、做什么、不要做什么等。到目前为止,我唯一知道的是模型 = 数据逻辑,视图 = gui和控制=交互,结论是要么我不擅长谷歌搜索,要么没有任何针对初学者的关于MVC的好的信息。

主要是我不太明白M、V和C之间的关系。

【问题讨论】:

  • 标题中不需要加 (SOLVED)。我们可以看到这个问题只需通过您为正确答案激活的复选符号或当我们在问题列表中查看答案数量是否为黄色时即可解决。请删除“(已解决)”。

标签: java arrays model-view-controller user-interface


【解决方案1】:

所以,让我们先解决一个简单的问题:就二维数组而言,实际上是由您决定它是 [row][column] 还是 [column][row]。 Java 不在乎。只要您在整个应用程序中始终如一地对待它,您就可以以对您最有意义的方式来考虑它。如果它有帮助(它可能不会)记住二维数组只是一个数组数组。

至于 MVC,我是这样想的:M 是数据的模型(例如数组),V 是数据的可视化表示(显示给用户,也许像棋盘)和C 是控制器,它将两者连接起来,并将其中一个的变化传输到另一个,根据需要翻译或以其他方式解释用户操作。如果用户将一个棋子从一个方格拖到另一个方格,控制器会解释这个手势,执行决定该操作是否合法以及它可能产生的副作用(如捕获棋子)的逻辑,并更新模型和视需要。混淆之处在于大多数 UI 工具包,包括 Java 在内,经常模糊这些部分之间的界限,因此控制器的部分最终出现在视图或模型中,或两者兼而有之。这不一定是问题,但需要注意。主要是尽可能地尝试在数据、视图和连接两者的逻辑之间保持明确的边界。

要回答您有关绘图和坐标的问题,这实际上取决于您如何实现棋盘 UI。例如,您可以完全使用 Java Swing 来实现它,并且通过巧妙地使用 JLabels、JPanels 以及可能的 GridLayout,甚至可能是 JTable,您几乎(几乎!)可以拥有一个自动更新的棋盘。另一方面,您可以从头开始实现自己的 UI 类,利用 Java2D 及其提供的绘图原语,然后您必须对坐标等进行更多管理。

【讨论】:

  • 关于数组,我该如何选择?例如,我的数组的列数与行数一样多。如果我使用 for 循环遍历数组,并且整数列在每个循环中递增,我会执行类似 [column][2] 的操作。那么我怎么知道它是否会将数字 2 视为列或行?第 2 列和第 2 行完全不同。
  • 我不明白如何将 V 中的图形对象连接到 M 数组中的元素?我也许可以调用一个方法,在构造函数中为数组中的“数据”方块创建和绘制“图形”方块,但问题仍然存在。如果用户单击“图形”方块,模型如何将其连接到数组中的方块? “数据”方块是如何关联的?
  • @Alex:也许我不理解你的问题,但“它”对列或行一无所知——这取决于你对数据的解释。这样想吧。你有 int[][] board = new int[8][8]。然后你可以说 int[] column5 = board[5]。变量 column5 现在包含一个简单的整数数组。然后你可以说 int cellValue = column5[3]。您现在已经选择了 int[] 数组的第 4 个插槽中的任何内容,该数组保存在 column5 中,您可以将其解释为从矩阵中选择第 4 行。您真正要做的就是首先选择一个子数组,然后从中选择一个项目。
  • @Alex:你必须想出 M 和 V 之间的粘合剂。如果你还没有这样做,我建议你玩一下 Swing 来感受一下 UI Java 编程,它大量使用事件监听器形式的观察者模式来提供这种粘合剂。例如,您可以让模型在更新时发布一个事件。然后,您的视图可以侦听这些事件并相应地更新自身。您还可以让 UI 在用户单击它时触发 MouseEvent,模型可以通过侦听该事件来响应。
  • 正确,很好的答案。谢谢!我几乎完成了 V 并将尝试将它们与 C 粘合在一起。
【解决方案2】:

亲爱的Ri8...实际上..我们无法清楚地看到MVC架构在小型应用程序中的优势意味着基于窗口的小型应用程序...但是当您使用大型企业应用程序时..您会意识到..

当开发大型企业级分布式系统时,有很多开发人员、设计人员和其他人员正在使用它。现在,假设开发人员在他们的编码部分进行设计..所以任何设计人员都很难理解..所以这部分是分开的,所以设计人员可以很容易地修改和理解这一点,因此不需要程序员的帮助及其一个 VIEW 组件....

就像有一些业务逻辑与视图组件相结合,程序员很难理解,并且将逻辑与视图组件分开需要太多时间,因此任何程序员都可以轻松快速地理解该逻辑..所以逻辑意味着模型和设计意味着任何 GUI 部分意味着 VIEW 组件是分离的......

现在 Controller .. 组件 .. 所以,CONTROLLER 组件在这两个模型和视图组件之间提供了桥梁。它决定了可以将哪个视图提供给最终用户。 并借助模型组件控制视图......

GOt .. IT.........!!!!...

如果有任何建议......最好来......

【讨论】:

    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 2020-09-22
    • 2015-05-16
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    相关资源
    最近更新 更多