簡體   English   中英

包含ImageIcon的JLabel不會重新繪制

[英]JLabel containing an ImageIcon won't repaint

我正在編寫一個應用程序,該應用程序以隨機​​順序創建一副紙牌,當按下按鈕時,將頂部紙牌移至底部並顯示新的頂部紙牌。 (這是向熟悉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的正確方法是什么?

代碼不明確...

跳到我身上的第一件事是...

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

這正在創建cardToDisplay的新實例,但是是否將其添加到任何地方? 前一個實例是否已刪除? 沒有上下文可以確定。

通常,當您想更改JLabel的圖標時,只需在JLabel的實例上調用setIcon即可。

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

因為這是一個綁定字段,它將自動觸發重新繪制請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM