我正在编写一个以随机顺序创建一副牌的应用程序,当按下按钮时,将顶部卡片移动到底部并显示新的顶部卡片。 (这是为熟悉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?
答案 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()));
因为这是一个绑定字段,它会自动触发重绘请求。