包含ImageIcon的JLabel不会重绘

时间:2014-08-06 06:15:56

标签: java swing imageicon

我正在编写一个以随机顺序创建一副牌的应用程序,当按下按钮时,将顶部卡片移动到底部并显示新的顶部卡片。 (这是为熟悉Magic:the Gathering的人模拟一个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中,该内容放置在JFrame框架内。我无法弄清楚重新绘制/重新验证的正确方法(我不太清楚差异是什么)我的GUI反映了更新后的图像。我已通过System.out.println调用确认了

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

正在更新,所以我假设正在重新分配JLabel。重绘它的正确方法是什么,以便它反映新的ImageIcon?

1 个答案:

答案 0 :(得分:1)

代码含糊不清......

第一件事就是......

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

这是创建cardToDisplay的新实例,但它是否已添加到任何地方?之前的实例已被删除吗?没有必要确定的背景。

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

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

因为这是一个绑定字段,它会自动触发重绘请求。