从JLayeredPane删除JLabel

时间:2013-02-02 18:42:02

标签: java swing jlabel imageicon jlayeredpane

我有一个分层的窗格,其中包含各种动画。我正在使用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();
        }

    }
}

1 个答案:

答案 0 :(得分:0)

我认为你遇到的问题是你在actionPerformed方法中创建了一个本地标签......

JLabel breakB = new JLabel();

这意味着,每次进入该方法时,您都要创建一个新的标签实例,这意味着当您要删除它时,您不再引用任何现有标签。

考虑创建breakB变量的单个实例或维护某种类型的列表,以便您知道哪些需要删除,如果您需要多个...

相关问题