Estou criando componentes em tempo de execução nao está aparecendo. [RESOLVIDO]

5 respostas
A

eu estou usando um panel como container e usando o revalidate e ainda assim não está aparecendo.

ButtonGroup grupo = new ButtonGroup();  
  
for (String caption : listaDeItens) {  
     JRadioButton button = new JRadioButton(caption);  
     grupo.add(button);  
  
     jPanel1.add(buttonn);  
}  
jPane1.revalidate();

5 Respostas

D

Use o método doLayout do container para forçar a execução do algoritmo do gerenciador de layout e o método repaint para forçar a repintura do container.
Exemplo:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

/**
 *
 * @author David Buzatto
 */
public class Janela extends JFrame {
    
    private JPanel container;
    private JButton botao;
    
    public Janela() {
        init();
    }
    
    public void init() {
        
        setTitle( "Foo" );
        setSize( 400, 400 );
        setDefaultCloseOperation( EXIT_ON_CLOSE );
        
        container = new JPanel();
        botao = new JButton( "Clique-me!" );
        
        add( container, BorderLayout.CENTER );
        add( botao, BorderLayout.SOUTH );
        
        botao.addActionListener( new ActionListener() {

            @Override
            public void actionPerformed( ActionEvent e ) {
                
                int quantidade = Integer.parseInt( 
                        JOptionPane.showInputDialog( "Entre com a quantidade:" ) );
                
                container.removeAll();
                
                for ( int i = 0; i < quantidade; i++ ) {
                    JLabel label = new JLabel( "Label " + ( i + 1 ) );
                    container.add( label );
                }
                
                container.doLayout();
                container.repaint();
                
            }
            
        });
        
    }
    
    public static void main( String[] args ) {
        new Janela().setVisible( true );
    }
    
}
D

Acabei de consultar a documentação. Lá é dito para não usar o método doLayout, mas sim o validate (java.awt.Component) ou o revalidate (java.swing.JComponent) da forma que você está usando. Sendo assim, o que falta no seu código é o repaint.

[]'s

A

david eu estou usando o NetBeans 6.8, tentando todo tipo de comando e não estou conseguindo inserir um radiobutton na tela em tempo de execução.

estou dando repaint, revalidate, setvisible no container e não está dando certo.

ButtonGroup bg = new ButtonGroup();

JRadioButton rdTeste = new JRaidoButton("teste");
bg.add(rdTeste);
jPanel1.add(rdTeste);
jPanel1.repaint();
jPanel1.revalidate();
jPanel1.setVisible(true);

isso tudo está no click de um button e ainda assim não consigo criar o radio button.

Oque pode estar acontecendo?

A

Consegui! faltava um “setLayout”.

D

Oi Algebra,

Só um detalhe. O gerenciador de layout padrão da classe JPanel é o FlowLayout. Não sei qual vc está usando, mas se deu certo, ótimo :wink:

[]'s

Criado 6 de fevereiro de 2012
Ultima resposta 7 de fev. de 2012
Respostas 5
Participantes 2