gpt4 book ai didi

java - 无法绘制多个 JLabel

转载 作者:行者123 更新时间:2023-11-30 07:27:13 25 4
gpt4 key购买 nike

我试图在 JPanel 上绘制 5 张卡片,但在显示卡片图像时遇到了问题。

JLabel[] cards = {
new JLabel(CARD_BACK),
new JLabel(CARD_BACK),
new JLabel(CARD_BACK),
new JLabel(CARD_BACK),
new JLabel(CARD_BACK)
};

for(int i=0; i<cards.length; i++) {
cards[i].setBounds(60*i, 0, 150, 215);
}

for(JLabel z : cards)
auxHands.add(z);

auxHands.setLayout(null);

上面的代码工作正常并绘制了 5 张卡片图像,但是当我尝试像这样压缩代码时:

JLabel[] cards = new JLabel[5];

Arrays.fill(cards, new JLabel(CARD_BACK));

for(int i=0; i<cards.length; i++) {
cards[i].setBounds(60*i, 0, 150, 215);
}

for(JLabel z : cards)
auxHands.add(z);
auxHands.setLayout(null);

它似乎只抽取了卡片的最后一个实例。最终,我将绘制多只手,并且像在第一个代码示例中那样继续实例化一个新的 JLabel[] 似乎很乏味。

这是我的意思的视觉效果:http://oipsl.freesuperhost.com/images/meh.png ,上半部分显示了我执行第一个代码片段时的样子,而下半部分是我执行第二个代码片段时的样子。

最佳答案

这段代码:

Arrays.fill(cards, new JLabel(CARD_BACK));

只创建一个单个 JLabel。然后它为数组中的所有 元素使用对该单个标签的引用...因此您得到的效果。它相当于:

// Equivalent bad code
JLabel label = new JLabel(CARD_BACK);
JLabel[] cards = { label, label, label, label, label };

希望您能明白为什么这不起作用。

您应该使用一个循环,它可以用新标签填充数组并同时设置边界。您也可以同时将它添加到 auxHands:

JLabel[] cards = new JLabel[5];
for (int i = 0; i < cards.length; i++) {
JLabel label = new JLabel(CARD_BACK);
label.setBounds(60*i, 0, 150, 215);
auxHands.add(label);
cards[i] = label;
}

请注意,除非您在其他地方需要数组,否则您可以完全取消它:

for (int i = 0; i < 5; i++) {
JLabel label = new JLabel(CARD_BACK);
label.setBounds(60*i, 0, 150, 215);
auxHands.add(label);
}

关于java - 无法绘制多个 JLabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9883751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com