Mudar Aba do JTabbedPane de um Jframe através do JButton de outro JFrame

Olá. pessoal!!!

Minha dúvida é a seguinte.

tenho dois Frames - Principal e Usuário.

Frame Principal tem um botão que abre o frame Usuário.
Frame Usuário tem um JTabbedPane com 4 Abas.

Pergunta: como fazer o Botão no Frame Principal selecionar uma Aba específica no Frame Usuário???

Vlw

Boa tarde!
Em poucas palavras, teria que passar como parâmetro o index da aba que seja abrir do principal para o usuário. Não sei como está seu código, mas eu tentaria fazer um construtor desse frame usuário que recebesse um int index, que indicasse qual aba era para ser mostrada na inicialização.

1 curtida

Olá RodrigoV10, obrigado por responder!!!
Pois é, isto eu sei, mas, não to conseguindo fazer. eu fiz isto aqui:

btnUsuario.setEnabled(false); 
FrmUsuarios vUsuarios = new FrmUsuarios(this);
FrmUsuarios.TbPnEdicaoUsuarios.setSelectedIndex(1); <=== Assim
vUsuarios.setVisible(true);

mas, não deu.

Estranho, se os painéis foram devidamente inicializados ele deveria alterar o painel selecionado. Tenta passar por parâmetro no construtor, para que seja alterado no próprio frame de usuários.

1 curtida

É, não é como eu queria, mas, estou criando via construtor.
Vamos ver se funciona.

Rodrigo, obrigado pela ajuda.

Usei este tutorial para resolver minhas dificuldades. Ainda não é o que eu queria, mas, já tá resolvendo.

https://www.youtube.com/watch?v=pO1SNvqk6sg

Crie um método no Frame Usuário para ser chamado pelo Frame Principal.

Veja o exemplo abaixo.

Tela Principal:

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;

public class TelaPrincipal extends JFrame {

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            
            TelaPrincipal tela = new TelaPrincipal();
            tela.setDefaultCloseOperation(EXIT_ON_CLOSE);
            tela.setLocationRelativeTo(null);
            Rectangle r = tela.getBounds();
            tela.setLocation(r.x - r.width / 2, r.y);
            tela.setVisible(true);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    private TelaUsuario telaUsuario;

    public TelaPrincipal() {
        super("Tela Principal");
        setSize(640, 320);

        JButton botaoAbrirTelaUsuario = new JButton("Abrir Tela Usuário");
        JButton botaoSelecionarAba0 = new JButton("Selecionar Aba 0");
        JButton botaoSelecionarAba1 = new JButton("Selecionar Aba 1");
        JButton botaoSelecionarAba2 = new JButton("Selecionar Aba 2");

        botaoAbrirTelaUsuario.addActionListener(event -> abrirTelaUsuario());
        botaoSelecionarAba0.addActionListener(event -> selecionarAba(0));
        botaoSelecionarAba1.addActionListener(event -> selecionarAba(1));
        botaoSelecionarAba2.addActionListener(event -> selecionarAba(2));

        JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
        panel.add(botaoAbrirTelaUsuario);
        panel.add(botaoSelecionarAba0);
        panel.add(botaoSelecionarAba1);
        panel.add(botaoSelecionarAba2);

        Container container = getContentPane();
        container.add(panel, BorderLayout.SOUTH);
    }

    private void selecionarAba(int aba) {
        TelaUsuario tela = getTelaUsuario();
        if (tela.isVisible()) {
            tela.selecionarAba(aba);
        } else {
            JOptionPane.showMessageDialog(this, "Abra a tela de usuário!", "Atenção", JOptionPane.WARNING_MESSAGE);
        }
    }

    private void abrirTelaUsuario() {
        TelaUsuario tela = getTelaUsuario();
        tela.setVisible(true);
    }

    private TelaUsuario getTelaUsuario() {
        if (telaUsuario == null) {
            telaUsuario = new TelaUsuario();
            telaUsuario.setDefaultCloseOperation(HIDE_ON_CLOSE);
            telaUsuario.setLocationRelativeTo(null);
            Rectangle r = telaUsuario.getBounds();
            telaUsuario.setLocation(r.x + r.width / 2, r.y);
        }
        return telaUsuario;
    }
}

Tela Usuário:

import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTabbedPane;

public class TelaUsuario extends JFrame {

    private JTabbedPane tabbedPane;

    public TelaUsuario() {
        super("Tela Usuário");
        setSize(320, 240);
        tabbedPane = new JTabbedPane();
        tabbedPane.addTab("Aba 0", new JLabel("Esta é a aba 0"));
        tabbedPane.addTab("Aba 1", new JLabel("Esta é a aba 1"));
        tabbedPane.addTab("Aba 2", new JLabel("Esta é a aba 2"));

        Container container = getContentPane();
        container.add(tabbedPane, BorderLayout.CENTER);
    }

    public void selecionarAba(int aba) {
        tabbedPane.setSelectedIndex(aba);
    }
}
1 curtida

Olá Staroski, obrigado por responder!!!

Responder, nada, melhor dizendo, dar uma aula. Sensacional sua resposta!!!

Estou tentando implementar sua resposta. Sou novato e ainda estou me batendo nesta linguagem incrível que é o Java, ou seja, estou sofrendo para implementar… kkkk

Mas, vou conseguir, tenha certeza.
Deixa em implementá-la e te dou retorno de como ficou.

Muito obrigado mesmo pela disposição do teu tempo.