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

7 respostas
java
deciorocha

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

7 Respostas

RodrigoV10

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.

deciorocha

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.

RodrigoV10

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.

deciorocha

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

deciorocha

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

staroski

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);
    }
}
deciorocha

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.

Criado 19 de setembro de 2018
Ultima resposta 20 de set. de 2018
Respostas 7
Participantes 3