Connect Four gui的网格构建

时间:2014-02-08 15:52:32

标签: java swing paint grid-layout

我已经能够使用图像文件(用作空心圆圈),循环和GridLayout创建网格,但我很清楚需要更多功能(比如删除令牌,但没有动画是必要的)所以我废弃了它,现在我又回到了空格。我被卡住了,我不确定如何才能做到这一点。我的代码目前很乱,所以我不确定发布它是否有意义。

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

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

我的选项已经用完了我对GUI(特别是Swing)的了解,而且我已经尝试了一周了。

任何提示?

1 个答案:

答案 0 :(得分:2)

有多种可能的方法可以解决这个问题,但一个简单的方法是给JPanel一个GridLayout,然后用带有显示空心圆的ImageIcons的JLabel填充它。选择该列后,将通过setIcon为相应的JLabel提供一个新的ImageIcon,其中显示一个颜色填充的圆圈。

另外,

  • 始终努力将程序逻辑代码与GUI代码分开,因为分离得越好,调试和增强的能力就越容易。
  • 一次一个地处理小问题。在解决当前的小步骤之前,不要继续处理下一个问题。
  • 在将其提交给代码之前,首先在纸上制定您的逻辑和想法。
  • 不要“使用油漆”。如果需要执行Swing图形,则需要覆盖JPanel或JComponent的paintComponent方法。绘画方法也涉及绘制边框和儿童,因此覆盖它可能会对这些产生令人讨厌和意想不到的副作用。默认情况下,paint不是双缓冲的,一旦开始使用动画,这可能会导致动画效果不佳。

修改
您在评论中说明:

  

虽然可以使用JButton吗?因为那是我第一次尝试时使用的。我可以使用setIcon吗?

你的意思是使用JButton而不是JLabel吗?这样可行,是的,您可以在JButtons上调用setIcon,但会使所有矩形看起来像按钮。所以,如果那没关系,那就去做吧。否则,您仍然可以使用JLabel,然后创建一个JButtons的行网格以放置在游戏网格的下方或上方,然后让用户按下这些按钮,并在其ActionListeners中让他们更改所选列中JLabel的图标

但话虽如此,我主要建议您使用最适合您的方法。无论你创造什么,学习都将在创造中。


编辑2
你问:

  

你认为将jlabels存储在一个数组中然后将它们放在一个面板中是否可能/一个很好的方法?

当然,我认为JLabel[]List<JLabel>的数组不仅是可能的,而且实际上对于这一点来说也是必不可少的。我认为你肯定在这里正确的方向。