Problemas com ButtonTabComponent para fechar abas;

Boa tarde gente,

Preciso de uma ajuda. Não estou conseguindo utilizar o ButtonTabComponent para fechar as JTabbedPane.
Ele sempre coloca o botão de fechar na primeira aba que abri e nas abas seguintes ele não coloca, mas preciso que esteja em todas as abas.
Não sei como resolver.

Sem mais, muito obrigado
Atencionsamente.
Agradeço a atenção;
Segue o código

import java.awt.event.ActionEvent;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.JTabbedPane;
public class ViewMenu extends JFrame {
        JMenuBar barra ;
		JMenu menuArquivo;
		JMenu mnCadB;
		JMenu mnGr;
        JMenuItem itemExtration,itemGeracao,itemCadastroPaises;
		JMenuItem arqSair;
		ViewPainelExtracao ext;
        ViewPainelGeracao gra;
        ViewPainelCadastroPaises cadps;
        JTabbedPane painel;
	public ViewMenu() {
		barra = new JMenuBar();
		menuArquivo = new JMenu("Arquivo");
		mnCadB = new JMenu("Cadastros Básicos");
		arqSair = new JMenuItem("Sair");		
        painel = new JTabbedPane();
        int i =0;
        mnGr = new JMenu("...");
		arqSair.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});
		ext = new ViewPainelExtracao();
                gra = new ViewPainelGeracao();
                cadps = new ViewPainelCadastroPaises();
               
		mnCadB.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
            	int i =0;
            	painel.setTabComponentAt(i,new ButtonTabComponent(painel));
			}
		});
        itemExtration = new JMenuItem("Extração de Dados");
		itemExtration.addActionListener(new ActionListener() {
                     public void actionPerformed(ActionEvent e) {
                             ext = new ViewPainelExtracao();
                             painel.addTab("Extração de Dados", ext);            	
                             int i = 0;
                             painel.setTabComponentAt(i,new ButtonTabComponent(painel));
			}
		}); 
        itemGeracao = new JMenuItem("Geração de Arquivo");
		itemGeracao.addActionListener(new ActionListener() {
                     public void actionPerformed(ActionEvent e) {
                         
                             gra = new ViewPainelGeracao();
                             painel.addTab("Geração de Arquivo", gra);            	
                             int i = 0;
                             painel.setTabComponentAt(i,new ButtonTabComponent(painel));
			}
		});
        itemCadastroPaises = new JMenuItem("Cadastro de Países");
		itemCadastroPaises.addActionListener(new ActionListener() {
                     public void actionPerformed(ActionEvent e) {
                            ViewPainelCadastroPaises cadps = new ViewPainelCadastroPaises();
                            painel.addTab("Cadastro de Países", cadps);            	
                            int i = painel.getSelectedIndex();
                            painel.setTabComponentAt(i,new ButtonTabComponent(painel));
			}
		});   
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		mnCadB.add(itemCadastroPaises);
        mnGr.add(itemExtration);
        mnGr.add(itemGeracao);
		menuArquivo.add(mnCadB);
		menuArquivo.add(mnGr);
        menuArquivo.add(arqSair);
		barra.add(menuArquivo);
		setJMenuBar(barra); 
        add(painel); 
		setVisible(true);
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        }
	public static void main(String[] args) {
		new ViewMenu();
	}
}

Classe ButtonTabComponent

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.remove(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.  
}