gpt4 book ai didi

java - 包含 ImageIcon 的 JLabel 不会重新绘制

转载 作者:行者123 更新时间:2023-12-01 12:40:24 25 4
gpt4 key购买 nike

我正在编写一个应用程序,该应用程序以随机​​顺序创建一副纸牌,当按下按钮时,会将顶部的纸牌移动到底部并显示新的顶部的纸牌。 (对于那些熟悉《万智牌》的人来说,这是为了模拟 Planechase 牌组。)按下按钮时,它会正确循环浏览图像文件,但是当我使用 ImageIcon 将图像分配给 JLabel 时,我无法获取 JLabel刷新新图像。这是我用来刷新的代码

    nextCardButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
planechase.topCardIncrement();
createCardToDisplay();
}
});

planechase 是 CardDeck 类的一个实例,它存储随机牌组,并具有多种洗牌、更换牌等方法。topCardIncrement() 将顶部牌更改为列表中的下一张牌。

    private void createCardToDisplay()
{
cardToDisplay = new JLabel(new ImageIcon(planechase.getFolderName() + "\\" + planechase.displayTopCard()));
}

createCardToDisplay 将 cardToDisplay 分配给从图像的文件夹名称和当前文件派生的图像。 cardToDisplay 放置在 JPanel contentPanel 内,而 contentPanel 放置在 JFrame 框架内。我无法找出重新绘制/重新验证(我不太清楚有什么区别)我的 GUI 来反射(reflect)更新后的图像的正确方法。我已经通过 System.out.println 调用确认了

    planechase.getFolderName() + "\\" + planechase.displayTopCard()

正在按预期更新,因此我假设 JLabel 已正确重新分配。重新绘制它以反射(reflect)新的 ImageIcon 的正确方法是什么?

最佳答案

代码不明确...

我首先想到的是......

private void createCardToDisplay()
{
cardToDisplay = new JLabel(new ImageIcon(planechase.getFolderName() + "\\" + planechase.displayTopCard()));
}

这正在创建 cardToDisplay 的新实例,但它是否已添加到任何地方?之前的实例是否已被删除?没有上下文可以确定。

通常,当您想要更改 JLabel 的图标时,只需在 JLabel 实例上调用 setIcon 即可。 .

cardToDisplay.setIcon(new ImageIcon(planechase.getFolderName() + "\\" + planechase.displayTopCard()));

由于这是一个绑定(bind)字段,因此会自动触发重绘请求。

关于java - 包含 ImageIcon 的 JLabel 不会重新绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25153391/

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