0

ある種のアニメーションを保持するレイヤードペインがあります。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();
        }

    }
}
4

1 に答える 1

0

あなたが抱えている問題は、actionPerformedメソッドでローカルラベルを作成しているという事実だと思います...

JLabel breakB = new JLabel();

これは、メソッドに入るたびに、ラベルの新しいインスタンスを作成していることを意味します。つまり、ラベルを削除するときに、既存のラベルへの参照がなくなります。

変数の単一のインスタンスを作成するbreakBか、ある種のリストを維持することを検討してください。そうすれば、複数のインスタンスが必要な場合に、どのインスタンスを削除する必要があるかがわかります...

于 2013-02-03T09:53:11.800 に答える