Evento para abas

Eu tenho um sistema que exibe algumas abas de acordo com o que está no banco.

Como eu faço, por exemplo, se a aba X estiver mostrando na minha tela, executar um método?

Acho que para o JTabbedPane (é isso que você está usando), provavelmente você tem de chamar o método getModel().addChangeListener() passando um ChangeListener para ele.

Você poderia me dar um exemplo bem claro?

Sou novo em java :slight_smile:

Rode o exemplo abaixo.

package guj;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class ExemploEventosJTabbedPane extends JFrame {
    private JTabbedPane tabbedPane;
    private JPanel panel;
    private JLabel lblStatus;
    private JPanel panel_1;
    private JPanel panel_2;
    private JPanel panel_3;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ExemploEventosJTabbedPane frame = new ExemploEventosJTabbedPane();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ExemploEventosJTabbedPane() {
        setTitle("Exemplo Evento JTabbedPane");
        setBounds(100, 100, 450, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().add(getTabbedPane(), BorderLayout.CENTER);
        getContentPane().add(getPanel(), BorderLayout.SOUTH);

    }

    private JTabbedPane getTabbedPane() {
        if (tabbedPane == null) {
            tabbedPane = new JTabbedPane(JTabbedPane.TOP);
            tabbedPane.addTab("Aba 1", null, getPanel_1(), null);
            tabbedPane.addTab("Aba 2", null, getPanel_2(), null);
            tabbedPane.addTab("Aba 3", null, getPanel_3(), null);
            // Aqui está o seu ChangeListener que responde ao evento de mudar a aba
            tabbedPane.getModel().addChangeListener(new ChangeListener() {
                @Override
                public void stateChanged(ChangeEvent e) {
                    // note que a primeira aba tem índice zero, e assim por diante
                    int index = tabbedPane.getModel().getSelectedIndex() + 1;
                    getLblStatus().setText(String.format("A aba %d foi selecionada", index));
                }
            });
        }
        return tabbedPane;
    }

    private JPanel getPanel() {
        if (panel == null) {
            panel = new JPanel();
            panel.add(getLblStatus());
        }
        return panel;
    }

    private JLabel getLblStatus() {
        if (lblStatus == null) {
            lblStatus = new JLabel("Clique em uma das abas");
        }
        return lblStatus;
    }

    private JPanel getPanel_1() {
        if (panel_1 == null) {
            panel_1 = new JPanel();
        }
        return panel_1;
    }

    private JPanel getPanel_2() {
        if (panel_2 == null) {
            panel_2 = new JPanel();
        }
        return panel_2;
    }

    private JPanel getPanel_3() {
        if (panel_3 == null) {
            panel_3 = new JPanel();
        }
        return panel_3;
    }
}

Humm, mas no meu sistema, quando eu apertar um botao, ele tem que verificar quais abas estao ativas e executar um metodo pra cada aba, entendeu?

Se quiser mais detalhes, consulte:

http://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html

http://www.exampledepot.com/search/luceneapi_node/jtabbedpane

Se você tem dificuldades com a língua inglesa, use o Google Translator ( http://translate.google.com ) ou o Bing Translator ( http://www.microsofttranslator.com/ )