Qual a melhor opção para construir minha interface?

Java é bom d+, só que interface com o usuário é uma parte bem complexa…

Tô com um probleminha, tentarei explicar sucintamente o que desejo fazer, e espero que me dêem alguma idéia:

No programa que estou desenvolvendo tem um formulário para cadastro de pessoas, portanto tem um monte de dados que tenho que inserir, a melhor opção que achei foi usar o JTabbedPane, que cria umas abinhas, aí divide os campos em quatro abas, e criei-os em quatro JPane separados, Crio um Frame instancio e adiciono o JTabbed a ele, instancio cada um dos paineis e adiciono-os ao JTabbed.
Para terem uma idéia melhor:

public class FrmPessoas extends javax.swing.JInternalFrame {
    public FrmPessoas() {
        super("Pessoas",false,true,true,true);
        setBounds((int)getBounds().getX(), (int)getBounds().getY()+40, getWidth(), getHeight());//Alguns ajustes de exibição
        initComponents();//Código do NetBeans        
        
        //Aqui está a parte importante:
        PnlPessoas1 painel1 = new PnlPessoas1();
        controlaAbas.addTab("Dados Pessoais", painel1);
        controlaAbas.addTab("Endereço",new PnlPessoas2());//PnlPessoas1 e 2 são classe públicas, portanto estão em arquivos separados
    }
}

Agora pra pegar os valores dos campos estou com problemas, pensei nas três opções:
1- Dentro de cada classe que herda o JPane criar métodos públicos que possam acessar o valor dos campos digitados pelo usuário. Só que além de dar muito trabalho vai despendiar um pouco mais de processamento, por causa das chamadas sucessivas de métodos.
2- Colocar todos os meus campos como variáveis públicas, ou protegidas, e acessá-las diretamente, só que aí eu assassino o encapsulamento.
3- Criar os JPane’s como classes internas e variáveis públicas, assim elas seriam encapsuladas pela minha classe JFrame, que é onde eu adiciono os Jpane’s ao JTabbed(as abas), me parece uma ganbiarra, mas uma boa idéia…

Entenderam minha idéia?
Qualquer sugestão ou comentário são bem vindos.

Eu faria assim:
Criaria uma classe com todos os atrubutos de um objeto. Por exemplo, dados de uma pessoa.

        public class Pessoa {
              private String nome=null;
              private Integer idade=null;
           /*  outros atributos, se existirem */

        /*  aqui, métodos de acesso get e set para cada atributo */

   /* fim da classe */
       }

Depois uma classe para implementar tudo o que pretendo fazer com Pessoa.

          public Interface BaseDAO {
                     public Object insere(object pessoa);
        /* Outros métodos interessantes  como excluir, listar, caso trabalhe com banco de dados*/
         }
       public class PessoaDAO extends BaseDAO{
              /* métodos da BaseDAO*/
      }

Com isso basta instanciar um objeto Pessoa para pegar os dados dos campos das suas janelas e PessoaDAO para trabalhar sobre essas informações.

Usar classes internas vai “inchar” suas classes sem necessidade. As outras duas opções vão dificultar manutenção de código porque vão espalhar métodos por todo canto.

É isso aí! Ajudou?

O certo é separar a interface dos dados, logo:

1- Crie uma classe Pessoa com seus campos e faça os sets e os gets do objeto e utilize na use interface. É a mais pura orientação a objetos possível.

public class Pessoa
{
  private String nome;
  private int idade;
  //mais o resto que vc quizer

  public Pessoa()
  {
  }

   //encapsule os campos

  public void setNome( String nome )
  {
    this.nome = nome;
  }

  public String getNome()
  {
    return nome;
  }

  public void setIdade( int idade )
  {
    this.idade = idade;
  }

  public int getIdade()
  {
    return idade;
  }
}

Valeu, ajudou a dar uma clareada…

acho que estou muito centrado na interface, e não posso ser assim, mas todos os problemas são devido à organização.

Tô trabalhando com cachê, e ele já me dá as classe prontinhas, com todos gets ans sets possíveis e mais alguns métodos utilitários para manipulação no banco.

Mas acho que ainda tenho um problema, é que o botão que salva os dados está no formulário,

[code]
public class FrmPessoas extends javax.swing.JInternalFrame {
private javax.swing.JButton cmdGravar;
public FrmPessoas() {
super(“Pessoas”,false,true,true,true);
setBounds((int)getBounds().getX(), (int)getBounds().getY()+40, getWidth(), getHeight());
initComponents();
cmdGravar = new Jbutton(“Gravar”);
this.add(cmdGravar);
PnlPessoas1 painel1 = new PnlPessoas1();
controlaAbas.addTab(“Dados Pessoais”, painel1);
controlaAbas.addTab(“Endereço”,new PnlPessoas2());

    //painel1.setVisible(true);
}[/code]

O PnlPessoas é uma classe separada que tem campos para dados como cpf, nome, identidade e o PnlPessoas2 tem dados referentes ao contato com a pessoa e-mail, endereço, bairro. Então? Deu pra entender melhor qual é o meu problema?
Como faço para acessar a classe do JPanel através do JFrame se elas estão separadas?

Se tiverem alguma dúvida sobre o que eu quero fazer, por favor, me falem.


Na imagem as marcas vermelhar indicam que, o que está dentro do mesmo círculo pertence a um único arquivo, ou seja o JTabbedPane é instanciado no JInternal, as outras classe foram feitas separadas, elas herdam de outras classes, em arquivos separados para facilitar a edição da GUI.