Como remover um JPanel?

Olá amigos, estou usando essa classe que peguei na net, ( acho que foi aqui no fórum ) para adicionar um botão de fechar em uma aba de um JTabbedPane.



import javax.swing.*;  
    import javax.swing.plaf.basic.BasicButtonUI;  
    import java.awt.*;  
    import java.awt.event.*;  
      
    public class ButtonTabComponent extends JPanel {  
        private final JTabbedPane pane;  
        
          //  
         //CONSTRUTOR  
        //  
        //Início...  
        public ButtonTabComponent(final JTabbedPane pane) {  
            
            //unset default FlowLayout' gaps  
            super(new FlowLayout(FlowLayout.LEFT, 0, 0));  
           
            if (pane == null) {  
                throw new NullPointerException("TabbedPane is null");  
            }  
            this.pane = pane;  
            setOpaque(false);  
      
            //faz a JLabel ler o título do JTabbedPane  
            JLabel label = new JLabel() {  
                public String getText() {  
                    int i = pane.indexOfTabComponent(ButtonTabComponent.this);  
                    if (i != -1) {  
                        return pane.getTitleAt(i);  
                    }  
                    return null;  
                }  
            };  
      
            add(label);  
            //adiciona mais espaço entre a label e o botão  
            label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));  
            //tab button  
            JButton button = new TabButton();  
            add(button);  
            //adiciona mais espaço para o topo do componente  
            setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0));  
        }//Fim do construtor.  
      
          //  
         //CLASSE TABBUTTON  
        //  
        //Define as características do botão fechar.  
        //  
        //Início  
        private class TabButton extends JButton implements ActionListener {  
            public TabButton() {  
                
                int size = 17;  
                setPreferredSize(new Dimension(size, size));  
                setToolTipText("Fechar esta aba!");  
                //Faz o botão ser igual para todas as Laf's  
                setUI(new BasicButtonUI());  
                //Torna-o transparente  
                setContentAreaFilled(false);  
                //Não necessidade de estar com focusable  
                setFocusable(false);  
                setBorder(BorderFactory.createEtchedBorder());  
                setBorderPainted(false);  
                //Fazendo um efeito de rolagem  
                //usamos o mesmo listener para todos os botões  
                addMouseListener(buttonMouseListener);  
                setRolloverEnabled(true);  
                //Fecha a guia apropriada, clicando no botão  
                addActionListener(this);  
            }  
      
            public void actionPerformed(ActionEvent e) {  
                int i = pane.indexOfTabComponent(ButtonTabComponent.this);  
               
                if (i != -1) {  
                   
                    pane.removeTabAt(i);
                   
                    
                    
                }  
            }  
      
            //pinta o X  
            protected void paintComponent(Graphics g) {  
                super.paintComponent(g);  
                Graphics2D g2 = (Graphics2D) g.create();  
                //mudança na imagem para botões pressionados  
                if (getModel().isPressed()) {  
                    g2.translate(1, 1);  
                }  
                g2.setStroke(new BasicStroke(2));  
                g2.setColor(Color.BLACK);  
                if (getModel().isRollover()) {  
                    g2.setColor(Color.MAGENTA);  
                }  
                int delta = 6;  
                g2.drawLine(delta, delta, getWidth() - delta - 1, getHeight() - delta - 1);  
                g2.drawLine(getWidth() - delta - 1, delta, delta, getHeight() - delta - 1);  
                g2.dispose();  
            }  
        }//Fim da classe TabButton.  
      
          //  
         //MOUSELISTENER  
        //  
        //Define os eventos de entrada e saida do mouse.  
        //  
        //Início...  
        private final static MouseListener buttonMouseListener = new MouseAdapter() {  
            public void mouseEntered(MouseEvent e) {  
                Component component = e.getComponent();  
                if (component instanceof AbstractButton) {  
                    AbstractButton button = (AbstractButton) component;  
                    button.setBorderPainted(true);  
                }  
            }  
      
            public void mouseExited(MouseEvent e) {  
                Component component = e.getComponent();  
                if (component instanceof AbstractButton) {  
                    AbstractButton button = (AbstractButton) component;  
                    button.setBorderPainted(false);  
                }  
            }  
        };//Fim dos Listeners.  
    } 

adicionar nova tab


  public void actionPerformed(ActionEvent e) {
            if (novoPanelTab(panelUsuario)){
            panelUsuario = new PanelUsuario();
            jTabbedPane1.addTab("    Dados do Usuário    ",panelUsuario);
            jTabbedPane1.setSelectedComponent(panelUsuario);
            adicionarBotaoPanel();
        }

método novoPanelTab


private boolean novoPanelTab(JPanel painel) {     
       
        if ( painel != null){
           
           jTabbedPane1.setSelectedComponent(painel);
           return false;
           return true;
       }

O problema é que ao fechar uma aba parece que ela é apenas setada para não ficar visível e ocorre erro ao tentar reabrir a aba.
Ele não seta como null e gera erro ao executar esse código


jTabbedPane1.setSelectedComponent(painel);

Erro


Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: component not found in tabbed pane
	at javax.swing.JTabbedPane.setSelectedComponent(JTabbedPane.java:659)
	at com.br.jkb.visual.FrameInicial.novoPanelTab(FrameInicial.java:700)
	at com.br.jkb.visual.FrameInicial.access$500(FrameInicial.java:35)
	at com.br.jkb.visual.FrameInicial$EventoPanelCliente.actionPerformed(FrameInicial.java:151)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at org.jdesktop.swingx.JXHyperlink.fireActionPerformed(JXHyperlink.java:264)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6263)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6028)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4630)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

UP, alguém?