java - Connect Four gui 的网格构建

标签 java swing paint grid-layout

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

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

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

我的 GUI 知识(尤其是 Swing)已经没有什么选择了,而且我已经尝试了一周了。

有什么提示吗?

最佳答案

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

另外,

  • 始终努力将程序逻辑代码与 GUI 代码分开,因为分离得越好,调试和增强的能力就越容易。
  • 一次解决一个小问题。在解决当前的一小步之前,不要继续处理下一个问题。
  • 首先在纸上弄清楚你的逻辑和想法,然后再将其付诸代码。
  • 不要“使用油漆”。如果您需要制作 Swing 图形,您将需要覆盖 JPanel 或 JComponent 的 paintComponent方法。 Paint 方法还涉及绘制边框和子元素,因此覆盖它可能会对这些产生令人讨厌和意想不到的副作用。另外,默认情况下绘制不是双缓冲的,一旦开始使用动画,这可能会导致动画效果不佳。
<小时/>

编辑
您在评论中指出:

Will it be okay to use JButton though? Because that was what i used during my first attempt. I can use setIcon with it too right?

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

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

<小时/>

编辑2
你问:

do you think it'll be possible/a nice approach to store jlabels in an array and then lay them out in a panel?

当然可以,或者是 JLabel[] 的数组或List<JLabel>我认为这不仅是可能的,而且实际上对于它的良好运作至关重要。我认为您绝对走在正确的道路上。

关于java - Connect Four gui 的网格构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21648123/

相关文章:

c# - 画笔算法/颜色褪色模式 - 需要建议

java - 将大科学数转换为长数

java - Strange if 行为的解释

java - 如何在 JTextArea 中添加整数集

Android:如何只为图像的特定部分填充颜色?

java - 多个 JPanel 在 JLayeredPane 中绘制图像

Java:如何使用用户相关的 "import.java.util.*;"反转多个字符串?

java - GWT:如何捕获哪些代码覆盖了 CSS 游标值。或者为什么它会覆盖?

java - 从 jframe 调用 japplet

java - 将 JPanel 排列在 ScrollPane 顶部,而不是居中