【发布时间】:2013-02-02 18:42:01
【问题描述】:
我有一个分层窗格,其中包含各种动画。我正在使用 Jlabel (breakB) 在正在破坏的块上显示破坏动画。当块破裂时,问题就出现了。标签应该消失,但它仍然可见。我一直在寻找解决方案几个小时,真的不知道发生了什么,所以任何帮助将不胜感激。
class breakBlock implements ActionListener {
public void actionPerformed(ActionEvent e) {
damageCount+=1;
System.out.println(damageCount);
JLabel breakB = new JLabel();
ImageIcon breakIcon = new ImageIcon();
if(digDown){
blockInt = standingOn;
} else {blockInt = nextTo;}
if(damageCount == 1){
breakIcon = new ImageIcon(break01);
}
if(damageCount == 2){
breakIcon = new ImageIcon(break02);
}
if(damageCount == 3){
breakIcon = new ImageIcon(break03);
}
if(damageCount == 4){
breakIcon = new ImageIcon(break04);
}
if(damageCount == 5){
breakIcon = new ImageIcon(break05);
}
breakB.setIcon(breakIcon);
breakB.setBounds(solidObjects.get(blockInt).getX(), solidObjects.get(blockInt).getY(), breakIcon.getIconHeight(), breakIcon.getIconWidth());
layeredPane.add(breakB, new Integer(2), 0);
if(damageCount == 6){
layeredPane.remove(solidObjects.get(blockInt));
layeredPane.remove(breakB);
layeredPane.repaint(); // sometimes needed
solidObjects.remove(blockInt);
damageCount = 0;
breakBlock.stop();
}
}
}
【问题讨论】:
-
我的猜测是您没有删除您的
JLabel的正确实例。据我所见,您没有保留要添加到JLayeredPane的breakB的引用,因此,除非您依靠一些糟糕的算法来找回它,否则您正在删除实际上不在其中的东西你的JLayeredPane。 -
您尚未将
global access提供给添加到layeredPane的每个JLabelbreakB。而您从layeredPane中删除的JLabel实际上在layeredPane上并不存在,它只是在actionPerformed内创建的localvariable。所以事实上,当条件damageCount == 6变为true时,所需的JLabel不会从layeredPane中删除。 -
那么我应该让 breakB 成为全局变量还是什么?编辑:好的,所以我将 breakB 设为全局变量,它现在正在工作。非常感谢!
-
如需尽快获得更好的帮助,请发帖SSCCE。
标签: java swing jlabel imageicon jlayeredpane