0
我有一个分层窗格,其中包含各种动画。我正在使用Jlabel(breakB)在一个正在破解的块上显示分解动画。问题出现时,块中断。标签应该消失,但是它保持可见。我一直在寻找解决方案几个小时,真的不知道发生了什么,所以任何帮助将不胜感激。从JLayeredPane删除JLabel
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'。 –
您没有为每个添加到'layeredPane'的JLabel'' breakB'提供'global access'。 ''''''''''''''''''''''''''''''''''''你从'layeredPane'中移除的'JLabel'实际上并不存在于'layeredPane'上,它只是'actionPerformed'内创建的'local''变量'因此,当'damageCount == 6'条件成为'true'时,实际上所期望的'JLabel'不会从'layeredPane'中移除。 –
那么我应该让breakB成为一个全局变量还是什么? 编辑:好的,我让breakB一个全局变量,它现在工作。非常感谢! – splouk