[Resolvido] Criação de novas abas através de botão de ação

Olá pessoal, estou desenvolvendo um projeto e nele inseri um botão cuja ação é criar novas abas em um JTabbedPane. Estou com dificuldade para fazer com que o aumento do tamanho do mesmo seja randômico e adicione as abas sempre ao lado direito, mas ao fazer tal ação, ele sempre adiciona a aba abaixo da aba padrão.
aba_1 aba_2

Segue código que criei para tal ação do botão:

JPanel jPAba2 = new JPanel();
jPNavegacao.setVisible(false);
int altura = jTPAbas.getHeight();
jTPAbas.setSize(jPAba1.getWidth() + jPAba1.getWidth(), altura);
jTPAbas.add(jPAba2).setBounds(jPAba1.getX() + 1, jPAba1.getY(), jPAba1.getWidth(), jPAba1.getHeight());

Imagino que preciso dobrar o tamanho do meu JTabbedPane e adicionar a nova aba, mas já tentei de algumas formas diferentes e todas sem sucesso. Alguém sabe como posso fazer isso?

Não, o componente sabe controlar o seu tamanho. :wink:

Você tem que criar as abas através do método addTab(String nomeDaAba, Component componenteAserAdicionado ) da classe JTabbedPane.

Veja o método adicionarAba() no exemplo abaixo:

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.UIManager;

public class Programa extends JFrame {

    private JTabbedPane tabbedPane;

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            Programa programa = new Programa();
            programa.setDefaultCloseOperation(EXIT_ON_CLOSE);
            programa.setLocationRelativeTo(null);
            programa.setVisible(true);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    Programa() {
        super("Meu Programinha");

        Dimension size = new Dimension(800, 600);
        setMinimumSize(size);
        setSize(size);

        Container container = getContentPane();
        container.setLayout(new BorderLayout());

        JButton button = new JButton("+");
        button.addActionListener(event -> adicionarAba());

        JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        panel.add(button);

        tabbedPane = new JTabbedPane();

        container.add(panel, BorderLayout.NORTH);
        container.add(tabbedPane, BorderLayout.CENTER);
    }

    private void adicionarAba() {
        int numero = tabbedPane.getTabCount();

        JPanel panel = new JPanel(new BorderLayout());
        panel.add(new JLabel("Esse é o JPanel " + numero));

        String titulo = "Aba " + numero;

        tabbedPane.addTab(titulo, panel);
    }
}
2 curtidas

Ótimo, funcionou!

A minha questão agora é que toda vez que eu clico em uma das abas, ele altera a posição das mesmas. Gostaria de deixar como o seu exemplo e não no formato abaixo:
Aba

Já tentei alterar as propriedades do jTabbedPane, mas sem sucesso.

Imagens não ajudam.
Posta o seu código e não esqueça de formatá-lo com o botão </>.

Não precisará, era uma propriedade padrão do jTabbedPane que estava influenciando. Tive que alterá-la de forma externa e com isso, o funcionamento está da forma desejada!

Muito obrigado mesmo pela ajuda.