Como fazer para adicionar componentes dinamicamente e ter o scroll se passar o limite?

Olá pessoal,

A tela é essa:

O usuario escolhe uma opcao do ComboBox e então várias JTextArea vão ser preenchidas e um JRadioButton amarrados a elas, para ele escolher qual quer.

Perguntas:

  1. Como faço para caso o número de JTextArea preenchidas ultrapassar esse JPanel(que já tem um scroll na figura) ter um scroll para ver as outras JTextArea que ultrapassam?
  2. Para “amarrar” o JRadioButton a sua JTextArea correspondente, tem um jeito fácil de fazer isso?

Muito obrigado desde já.

1 - Ponha um JScrollPane no seu formulário, e dentro do JScrollPane ponha um JPanel, que será usado para inserir os demais componentes. Ajuste o Layout Manager do JPanel para GridLayout, de modo que o layout tenha apenas uma coluna. Quando adicionar um componente ao JPanel, ajuste o tamanho preferencial do componente para um valor mínimo (digamos, 100 para a altura e 200 para a largura). Dessa maneira, o JScrollPane exibirá as barras de rolagem que permitirão visualizar totalmente os componentes contidos no JPanel.

2 - Uma saída possível para isso é colocar os JRadioButton’s e JTextArea’s num HashMap, onde o JRadioButton seria a chave e a JTextArea seria o valor.

[quote=roger_rf]1 - Ponha um JScrollPane no seu formulário, e dentro do JScrollPane ponha um JPanel, que será usado para inserir os demais componentes. Ajuste o Layout Manager do JPanel para GridLayout, de modo que o layout tenha apenas uma coluna. Quando adicionar um componente ao JPanel, ajuste o tamanho preferencial do componente para um valor mínimo (digamos, 100 para a altura e 200 para a largura). Dessa maneira, o JScrollPane exibirá as barras de rolagem que permitirão visualizar totalmente os componentes contidos no JPanel.

2 - Uma saída possível para isso é colocar os JRadioButton’s e JTextArea’s num HashMap, onde o JRadioButton seria a chave e a JTextArea seria o valor.[/quote]
Opa obrigado pela resposta.

Mas quanto ao item 1: Eu adicionei o JScrollPane com um JPanel dentro, ajustei o Layout dele para Grid. Só não entendi essa parte de tamanho preferencial, é o setBounds()? Aqui, quando eu coloco para adicionar, ele não aparece o componente. Não é jPanel.add(meuComponente) ?

Para ajustar o tamanho preferencial de um componente, use componente.setPreferredSize().

Cara ainda não estou conseguindo, bendito Swing. A barra não aparece, não sei o que estou fazendo errado.

Criei uma classe teste e montei assim já (com GridLayout, mas com 2 colunas mesmo), e o JPanel já está “lotado”. Aí esse botão “Adicionar” vai adicionar mais um JRadio e mais um JTextField para assim ultrapassar os limites e criar as barras de rolagem.

Codigo executado pra quando o botao "Adicionar"for clicado:

    private void botaoActionPerformed(java.awt.event.ActionEvent evt) {                                      
        JRadioButton jRadioButton4 = new JRadioButton();
        jRadioButton4.setText("teste radio");
        jRadioButton4.setPreferredSize(new Dimension(100,200));
        jPanel1.add(jRadioButton4);
        
        JTextField textArea3 = new JTextField();
        textArea3.setText("teste texto");
        textArea3.setPreferredSize(new Dimension(100,200));
        jPanel1.add(textArea3);
    }  

No que estou errando?

Muito obrigado pela sua ajuda, agradeço mais ainda se puder me ajudar a resolver essa, esse projeto é parte do meu TCC.

textArea1 = new JTextArea();
scrollPane = new JScrollPane(textArea1);