代码之家  ›  专栏  ›  技术社区  ›  user3026693

Connect Four gui的网格构建

  •  1
  • user3026693  · 技术社区  · 12 年前

    我已经能够使用图像文件(用作空圆圈)、循环和GridLayout创建网格,但我很清楚需要更多的功能(例如删除标记,尽管还不需要动画),所以我放弃了它,现在我又回到了空网格。我被困住了,我真的不知道如何才能做到这一点。我的代码现在一团糟,所以我不确定我发布它是否有意义。

    我的主要问题是如何构建一个网格,然后用实心圆圈填充网格(我正在使用图像文件取消,就我而言,这似乎有点复杂),一旦玩家单击与他选择的列相对应的按钮,我就可以用令牌的图像文件填充网格(然后在游戏结束后重置所有内容)。换言之,一个纯色的矩形和一个空圆圈,用记号填充,但不是纯色,而是一个图像文件。

    我一直在努力熟悉 paint() 但我上周才开始学习GUI,所以我可能还需要学习更多的东西才能在相当程度上理解它。

    我已经用尽了与我的GUI知识相当的选项(特别是Swing),我已经尝试了一周。

    有什么提示吗?

    1 回复  |  直到 12 年前
        1
  •  2
  •   Hovercraft Full Of Eels    12 年前

    有多种可能的方法来解决这个问题,但一种简单的方法是给JPanel一个GridLayout,然后用显示空圆圈的ImageIcons填充JLabels。选择列后,相应的JLabel将通过 setIcon 显示了一个彩色圆圈。

    而且

    • 始终努力将程序逻辑代码与GUI代码分离,因为分离越好,调试和增强的能力就越容易。
    • 一次解决一个小问题。在解决当前的小步骤之前,不要继续下一个问题。
    • 在将逻辑和想法提交到代码之前,先在纸上写出它们。
    • 不要“使用油漆”。如果需要使用Swing图形,则需要覆盖JPanel或JComponent的 paintComponent 方法绘制方法还涉及到绘制边界和子对象,因此覆盖它可能会对这些对象产生恶劣和意外的副作用。此外,默认情况下,绘制不是双重缓冲的,一旦开始使用动画,这可能会导致动画不好。

    编辑
    您在评论中声明:

    不过,使用JButton可以吗?因为这是我第一次尝试时使用的。我也可以使用setIcon,对吗?

    你的意思是用JButton代替JLabel吗?那会奏效的,是的,你可以打电话 设置图标 但会使所有矩形看起来像按钮。因此,如果可以,那么就这样做。否则,您仍然可以使用JLabels,然后创建一个JButtons行网格,将其放置在游戏网格的下方或上方,然后让用户按下这些按钮,在ActionListeners中让他们更改所选列中JLabel的图标。

    尽管如此,我还是建议您使用最适合您的产品。学习将在创造中进行,无论你创造什么。


    编辑2
    你问:

    您认为将jlabels存储在一个数组中,然后将其放置在一个面板中是可能的/一种不错的方法吗?

    当然 JLabel[] List<JLabel> 我认为这不仅是可能的,事实上也是至关重要的。我认为你在这里绝对是正确的。