我已经能够使用图像文件(用作空心圆圈),循环和GridLayout创建网格,但我很清楚需要更多功能(比如删除令牌,但没有动画是必要的)所以我废弃了它,现在我又回到了空格。我被卡住了,我不确定如何才能做到这一点。我的代码目前很乱,所以我不确定发布它是否有意义。
我的主要问题是如何构建一个网格,然后只用纯色填充(我正在取消使用图像文件,就我而言似乎有点复杂)用空心圆圈,一旦玩家点击与他选择的列对应的按钮(然后在游戏结束后重置所有内容),我将能够填充令牌的图像文件。换句话说,一个纯色矩形和空圆圈由标记填充,但不是纯色,而是图像文件。
我一直在努力让自己熟悉paint()
,但我上周才开始学习GUI,所以我可能还需要学习更多东西才能在相当程度上理解它。
我的选项已经用完了我对GUI(特别是Swing)的了解,而且我已经尝试了一周了。
任何提示?
答案 0 :(得分:2)
有多种可能的方法可以解决这个问题,但一个简单的方法是给JPanel一个GridLayout,然后用带有显示空心圆的ImageIcons的JLabel填充它。选择该列后,将通过setIcon
为相应的JLabel提供一个新的ImageIcon,其中显示一个颜色填充的圆圈。
另外,
paintComponent
方法。绘画方法也涉及绘制边框和儿童,因此覆盖它可能会对这些产生令人讨厌和意想不到的副作用。默认情况下,paint不是双缓冲的,一旦开始使用动画,这可能会导致动画效果不佳。 修改强>
您在评论中说明:
虽然可以使用JButton吗?因为那是我第一次尝试时使用的。我可以使用setIcon吗?
你的意思是使用JButton而不是JLabel吗?这样可行,是的,您可以在JButtons上调用setIcon
,但会使所有矩形看起来像按钮。所以,如果那没关系,那就去做吧。否则,您仍然可以使用JLabel,然后创建一个JButtons的行网格以放置在游戏网格的下方或上方,然后让用户按下这些按钮,并在其ActionListeners中让他们更改所选列中JLabel的图标
但话虽如此,我主要建议您使用最适合您的方法。无论你创造什么,学习都将在创造中。
编辑2
你问:
你认为将jlabels存储在一个数组中然后将它们放在一个面板中是否可能/一个很好的方法?
当然,我认为JLabel[]
或List<JLabel>
的数组不仅是可能的,而且实际上对于这一点来说也是必不可少的。我认为你肯定在这里正确的方向。