我有一个Jlabels数组,每个都有一个imageIcon附加到它。附件发生在构造函数外部的一个被调用多次的方法中,在方法结束时我使用了repaint()。
问题是,在一个certin Jlabel被绘制之后,我无法让他“unDraw,即使我将Jlabel(或图像)更改为null。”似乎只是呆在那里。
我试图再次重新绘制,重置背景颜色并重新验证,而非似乎可以完成这项工作。
任何想法?
编辑:我尝试了以下内容(在edt中),它似乎只更改了数组上的最后一个JLable:
for (int j = 0;j<playerCards.length;j++){
remove(playerCards[j]);
}
答案 0 :(得分:2)
尝试将UI操作移动到EDT线程中。不在那里制作它们会导致不可预测的结果。
EDT - 事件派遣线程
您应该使用EDT线程对GUI进行更改,以便这是唯一对其进行更改的线程。
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
//UI changes here
}
}
);
答案 1 :(得分:-2)
尝试使用
SwingUtilities.updateComponentTreeUI(YOUR_OBJECT_CONTAINER);
其中YOUR_OBJECT_CONTAINER是一个java对象,它扩展了包含要删除的JLabel的JComponent。