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