2013-02-02 41 views
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(); 
     } 

    } 
} 
+1

我的猜測是,你不刪除「JLabel」的正確實例。就我所知,你並沒有保留對你添加到'JLayeredPane'中的'breakB'的引用,因此,除非你依靠一些糟糕的算法找回它,否則你正在刪除一些實際上不存在的東西你的'JLayeredPane'。 –

+0

您沒有爲每個添加到'layeredPane'的JLabel'' breakB'提供'global access'。 ''''''''''''''''''''''''''''''''''''你從'layeredPane'中移除的'JLabel'實際上並不存在於'layeredPane'上,它只是'actionPerformed'內創建的'local''變量'因此,當'damageCount == 6'條件成爲'true'時,實際上所期望的'JLabel'不會從'layeredPane'中移除。 –

+0

那麼我應該讓breakB成爲一個全局變量還是什麼? 編輯:好的,我讓breakB一個全局變量,它現在工作。非常感謝! – splouk

回答

0

我想你遇到的問題是,你正在創建的actionPerformed方法本地標籤的事實...

JLabel breakB = new JLabel(); 

這意味着,每次你進入方法,您正在創建標籤的新實例,這意味着您在刪除標籤時不再提及任何現有標籤。

考慮創建breakB變量的單個實例或保持某種形式的列表,所以你知道哪些需要拆除,如果你需要不止一個......