[英]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.