Mostrar painel

7 respostas
E

Bom dia javazeiros ! o/
To com um duvida meio besta aqui, to fazendo um projeto de campo minado pra facul e é o seguinte:
minha classe principal (teste) tem o seguinte método que cria uma instância da minha segunda classe (teste1) que é um jpanel.

private void BtnJogarActionPerformed(java.awt.event.ActionEvent evt) {                                         
        t1 = new Teste1();
        t1.IniciarCampos(Integer.parseInt(campoLinhas.getText()), Integer.parseInt(campoColunas.getText()), Integer.parseInt(campoMinas.getText()));

        JFrame frame = new JFrame();
        frame.add(t1);
        frame.setSize(440, 440);
        frame.setVisible(true);

        t.setVisible(false);
    }

O problema é que a o jPanel t1 é um painel que contém outro painel. Ou seja, o painel de dentro vai ser o campo minado com a matriz de botões, etc.
Eu fiz assim pra ficar mais fácil de organizar. Porém esse painel de dentro do t1 não tá aparecendo, t1 aparece normal, mais sem o painel dentro dele.
Como faço pra mostrar os 2 ? Tem como, ou vou ter qe mudar o código ? Segue o código da classe Teste1 :

public class Teste1 extends javax.swing.JPanel implements ActionListener{

    public Teste1() {
        initComponents();
    }

    private void initComponents() {

        campoMinado = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();

        campoMinado.setBorder(new javax.swing.border.MatteBorder(null));
        campoMinado.setLayout(null);

        jButton1.setText(":)");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(campoMinado, javax.swing.GroupLayout.DEFAULT_SIZE, 403, Short.MAX_VALUE)
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 243, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(89, 89, 89))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jButton1)
                .addGap(11, 11, 11)
                .addComponent(campoMinado, javax.swing.GroupLayout.DEFAULT_SIZE, 279, Short.MAX_VALUE)
                .addContainerGap())
        );
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    }                                        

    public void IniciarCampos(int x,int y, int z){
        campoMinado.setLayout(new GridLayout(x,y,2,2));
        numMinas = z;
        numColunas = y;
        tamCampo = x*y;
        button = new JButton[tamCampo];
        vetor = new int[tamCampo];

        for (int i=0;i>=tamCampo;i++){
            button[i] = new JButton("");
            button[i].addActionListener(this);
            button[i].setFocusable(false);
            button[i].setEnabled(true);
            campoMinado.add(button[i]);
        }

        PreencherCampo(vetor);
        campoMinado.setVisible(true);
    }

Abraço galera! Agradeço desde já !

7 Respostas

D

Em qual momento você está chamando o método IniciarCampo? Porque estou vendo que você está adicionando os botões neste método… é isso?

E

o IniciarCampos é chamado na primeira classe ai (onde colei o código) é o action perfomed de um botão na verdade, que instancia uma classe de teste1 quando é criado!

private void BtnJogarActionPerformed(java.awt.event.ActionEvent evt) {                                           
    t1 = new Teste1();
    // Aqui o método \/ 
    t1.IniciarCampos(Integer.parseInt(campoLinhas.getText()), Integer.parseInt(campoColunas.getText()), Integer.parseInt(campoMinas.getText()));  
  
    JFrame frame = new JFrame();  
    frame.add(t1);  
    frame.setSize(440, 440);  
    frame.setVisible(true);  
  
    t.setVisible(false);  
}
E

Pra tentar simplificar minha duvida. Eu simplesmente quero saber o procedimento para adicionar um jpanel ao outro.
Eu deixo o primeiro visivel, o segundo ou os 2 ?

D

É só deixar o JFrame visível neste caso… Mas o seu erro está neste IniciarCampo… ele está fora do construtor da classe ele é um método, desse modo, os componentes não irão aparecer ao se iniciar o programa. Você pode ao chamar o método IniciarCampo e ao adicionar a quantidade de botões desejada, validar este JPanel.

public void IniciarCampos(int x,int y, int z){  
        campoMinado.setLayout(new GridLayout(x,y,2,2));  
        numMinas = z;  
        numColunas = y;  
        tamCampo = x*y;  
        button = new JButton[tamCampo];  
        vetor = new int[tamCampo];  
  
        for (int i=0;i>=tamCampo;i++){  
            button[i] = new JButton("");  
            button[i].addActionListener(this);  
            button[i].setFocusable(false);  
            button[i].setEnabled(true);  
            campoMinado.add(button[i]);  
        }  
  
        PreencherCampo(vetor);  // Qual a funcionalidade?
        campoMinado.setVisible(true);  //Não necessário
        campoMinado.invalidate();
        campoMinado.validate();
    }
E

Acho que entendi, não posso mudar e adicionar objetos ao painel depois de já ter chamado o seu construtor né ?
Devo tentar fazer o IniciarCampos dentro do construtor da classe então ? Acho que ficaria até melhor msm, é um método a menos!

D

Você pode mudar sim, mas ao fazer isso você deve validar novamente o JPanel… entenda como atualizá-lo !
Mas no teu caso, seria mais fácil realizar este procedimento no construtor mesmo.

E

Aaaaah sim ! Já arrumei aqui e agora tá funcionando ,/.
Brigadão pela ajuda cara ! Abrss!

Criado 15 de dezembro de 2011
Ultima resposta 16 de dez. de 2011
Respostas 7
Participantes 2