Acessar - metodos de um JPanel inserido em outro JPanel [Resolvido]

Boa noite,

Googoliei inclusive no site e não encontrei nada referente a minha duvida. Tenho algumas telas do awt/swing, que tem um JPanel principal, com outros JPanel’s internos.
Como posso comparilhar essas informações, entre os outros JPanel’s?

Toda ajuda é, muito bem vinda, pois estou desde ontem atraz disso.

[]s

Você pode usar métodos como getComponent e getParent para obter os paineis, porém o ideal seria passar as instância que você precisa, por exemplo, no construtor de uma classe que encapsule seu JPanel.

Boa noite,

Entendi, só mais uma duvida, dentro desses JPanel’s internos, dois que precisam compartilhar um valor. No caso usaria o contrutor, de um deles para receber alguma informação, mas e no caso de mudança deste valor.

Meu caso:

Tenho um JPanel com JRadionButton’s, dependendo de qual está selecionado, o outro JPanel vai ter um comportamento diferente. Caso passe o get dentro do contrutor, mesmo que estes valores mudem, pelo fato de trocar as marcações (JRadioButton’s), a informação passa será atualizada?

Obrigado.

[]s

Bom dia,

Tentei passar esse parametro através de um get/set e não foi possivel. Ambos os JPanels estão, confinados dentro de um outro, ainda estou pesquisando na net. Alguem tem alguma sugestão?

[]s

não sei se entendi bem mais pelo que entendi

voce tem um Jpanel que tem dois Jpanels internos.

voce quer que o atributo Jradionbutton seja comum a ambos os jpanels

se entendi corretamente descreva como esse mecanismo ocorre com tipo.
quando voce clica em um jradionbutton voce reconstro o outro jpanel e atualiza esse jpanel?

se nao entendi corretamente espero que alguem que tenha mais habilidade em portugues do que eu apareça aqui

Como você tentou passar os parâmetros?

Segue um exemplo de passagem de referência pelo construtor, a diferença é que este exemplo trabalha em cima de dois frames: http://www.guj.com.br/posts/list/219850.java#1124714

Bom dia,

Vou ler o topico passado, enquanto isso vai um exemplo, que preparei:

Abaixo, codigo do JPanel que vai armazenar, os dois JPanel’s:

public class PainelPrincipal extends JPanel {

    public PainelPrincipal() {
        super();
        this.inicializaComponentes();
    }

    private void inicializaComponentes() {
        Dimension dimensao = new Dimension(300, 90);
        this.setSize(dimensao);
    }

}

Abaixo, codigo do JPanel que contem os JRadioButton’s, e vai ser inserido no JPainel “principal”:

public class PainelRadioButton extends JPanel {

    public PainelRadioButton() {
        super();
        this.inicializaComponentes();
    }

    private void inicializaComponentes() {
        //Acao para radio A
        ItemListener acaoA = new ItemListener() {

            public void itemStateChanged(ItemEvent e) {
                //Aqui manda texto "A" para o JTextField
            }

        };

        JRadioButton radioA = new JRadioButton("A");
        radioA.addItemListener(acaoA);
        radioA.setSelected(true);
        //Acao para radio B
        ItemListener acaoB = new ItemListener() {

            public void itemStateChanged(ItemEvent e) {
                //Aqui manda texto "B" para o JTextField
            }

        };

        JRadioButton radioB = new JRadioButton("B");
        radioB.addItemListener(acaoB);
        
        ButtonGroup grupoRadio = new ButtonGroup();

        this.add(radioA);
        this.add(radioB);

        grupoRadio.add(radioA);
        grupoRadio.add(radioB);
    }

}

Abaixo, codigo do JPanel que contem o JTextField, e tambem vai ser inserido no JPainel “principal”:

public class PainelMensagem extends JPanel {

    public PainelMensagem() {
        super();
        this.inicializaComponentes();
    }

    private void inicializaComponentes() {
        Dimension dimensao = new Dimension(100, 20);
        this.setSize(dimensao);
        
        JTextField caixaDeTexto = new JTextField();
        caixaDeTexto.setPreferredSize(dimensao);
        this.add(caixaDeTexto);
    }

}

Frame com a estrutura exposta nos 3 codigos acima:

public class FramePrincipal extends JFrame {
    private PainelPrincipal painelPrincipal;
    private PainelRadioButton painelRadio;
    private PainelMensagem painelMensagem;

    public FramePrincipal() {
        super();
        this.inicializaComponentes();
    }

    private void inicializaComponentes() {
        this.setLocationRelativeTo(null);
        Dimension dimensao = new Dimension(350, 100);
        this.setSize(dimensao);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        
        this.painelPrincipal = new PainelPrincipal();
        this.painelRadio = new PainelRadioButton();

        this.painelMensagem = new PainelMensagem();
        
        this.painelPrincipal.add(this.painelRadio);
        this.painelPrincipal.add(this.painelMensagem);
        
        this.setContentPane(this.painelPrincipal);
    }

}
public class Main {

    public static void main(String args[]) {
        FramePrincipal aplicativo = new FramePrincipal();
        aplicativo.setVisible(true);
    }

}

O problema que estou tendo é equivalente, ao clicar nos radios A ou B, e colocar as respectivas letras na JTextField. Onde a ação é disparada pelo evento do item.

Obrigado pela ajuda até o momento.

Nota: (Edit) Para informar que li o topico, mas não diluiu minha duvida. Obrigado.

[]s

Hmm, agora entendi. Vou deixar uma ideia.

Você pode criar em seu PainelRadioButton, uma variável para guardar a referência do seu PainelMensagem. A atribuição deste valor pode ser passado pelo construtor.

[code]// Classe PainelRadioButton
PainelMensagem pnlMensagem;

public PainelRadioButton(PainelMensagem pnlMensagem) {
this.pnlMensagem = pnlMensagem;
inicializaComponentes();
}[/code]Assim PainelRadioButton terá acesso ao PainelMensagem.

Para poder setar o texto pode criar um método set.

// Classe PainelMensagem void setMensagem(String msg) { caixaDeTexto.setText(msg); }
Então, no evento do radio button pode chamar este método set a partir da referência passada pelo construtor.

// Classe PainelRadioButton (inicializaComponentes()) ItemListener acao = new ItemListener() { public void itemStateChanged(ItemEvent e) { editarMensagem(); } };// Classe PainelRadioButton private void editarMensagem() { if (radioA.isSelected()) pnlMensagem.setMensagem("A"); else if (radioB.isSelected()) pnlMensagem.setMensagem("B"); else pnlMensagem.setMensagem(""); }

cara eu acho que voce deve procurar uma solução elegante por ai .

mais para uma solução trivial

é so declarar o seu JTextField como um atribudo da classe paineldemensagem

public class PainelMensagem extends JPanel {   
	 static JTextField caixaDeTexto=new JTextField();  //aqui o atributo declarado
    public PainelMensagem() {   
        super();   
        this.inicializaComponentes();   
       
    }   
  
    private void inicializaComponentes() {   
        Dimension dimensao = new Dimension(100, 20);   
        this.setSize(dimensao);   
           
        caixaDeTexto.setPreferredSize(dimensao);   
        this.add(caixaDeTexto);   
    }   
  
}

e na sua classse de painelradionbutton

public class PainelRadioButton extends JPanel {   
  
    public PainelRadioButton() {   
        super();   
        this.inicializaComponentes();   
    }   
  
    private void inicializaComponentes() {   
        //Acao para radio A   
        ItemListener acaoA = new ItemListener() {   
  
            public void itemStateChanged(ItemEvent e) {
                  PainelMensagem.caixaDeTexto.setText("A");  //atribuir o texto 
                
            }   
  
        };   
  
        JRadioButton radioA = new JRadioButton("A");   
        radioA.addItemListener(acaoA);   
        radioA.setSelected(true);   
        //Acao para radio B   
        ItemListener acaoB = new ItemListener() {   
  
            public void itemStateChanged(ItemEvent e) {   
            	 PainelMensagem.caixaDeTexto.setText("B");  //atribui o texto
            }   
  
        };   
  
        JRadioButton radioB = new JRadioButton("B");   
        radioB.addItemListener(acaoB);   
           
        ButtonGroup grupoRadio = new ButtonGroup();   
  
        this.add(radioA);   
        this.add(radioB);   
  
        grupoRadio.add(radioA);   
        grupoRadio.add(radioB);   
    }   
  
}  

aqui funcionou espero que funcione ai mas que voce tambem procure uma maneira mais elegante de se fazer isso

esse seu codigo ai tu da fazendo essa parada ai no netbeans?

enquando eu escrevia o eric escrevia que coecidencia

Boa noite,

Obrigado pela ajuda de todos :slight_smile:

BrunoBastosPJ, depois de trabalhar o código do Eric Yuzo, realmente entendi o que você havia me passado. :slight_smile:

alberto665+1, sim estou usando o NetBeans sem o assistente de contrução de GUI da IDE. :slight_smile: Porém usando os recursos para completar os códigos, importar classes, refatorar e por aí vai.

Eric Yuzo, funcionou perfeitamente no exemplo, exatamente como fui orientado. Agora vou ajustar as classes do sistema. :slight_smile: A noite vai ser longa :smiley:

Obrigado novamente :slight_smile:

[]s