JFrame, JInternalFrame ou JPainels

5 respostas Resolvido
A

Olá Pessoal,

Comecei a fazer um sistema de caixa bem simples, ao invés de usar o JTabbedPane fiz um menu vertical e a esquerda usando jButtons (Cliente, Produto, etc), daí me veio uma dúvida:

Qual o mais correto a se fazer, criar vários JFrames (1 pra Clientes, 1 pra Produto e assim por diante) ou criar só um JFrame principal e depois criar vários JPanels pra ser usado dentro de um único JFrame?

5 Respostas

D

Depende, mas eu evitaria usar vários JFrames.

Supondo um sistema diferente em que tenha uma tela para professor e outra para aluno, se o professor for também aluno, seria muito conveniente as telas serem em JPanels, colocaria num JTabbedPane, e dessa forma o professor que também é aluno teria fácil acesso as duas telas.

Outra vantagem é que pode reaproveitar as telas, supondo que tenha a tela de cadastro do produto e tela de atualização do produto, ambas as telas serão muito parecidas, separaria o que há em comum num JPanel e criaria mais dois JPanels específicos para cada caso.

class TelaProdutoComum extends JPanel {
    JTextfield nome;
    JComboBox categoria;
    JTextfield peso;
    JTextfield preco;;
}

class TelaProdutoCadastro extends JPanel {
    TelaProdutoComum produto;
    JTextField codigoDoProduto;
    JButton cadastrar;
}

class TelaProdutoAtualizacao extends JPanel {
    TelaProdutoComum produto;
    JLabel codigoDoProduto;
    JButton atualizar;
    JButton remover;
}

O mesmo não pode ser feito com JFrames.

G

O mais correto é utilizar um JFrame, e utilizar um Container, e quando for alterar o cliente para o produto é só definir o contentPane do jframe para o Container do cliente e virse versa, da tb para implementar um TabbedPane e colocar os container lá

A

No caso esse exemplo que você citou, TelaProdutoComum, telaProdutoCadastro e TelaProdutoAtualização seriam 3 JFrames que herdam um JPanel que é comum a todos, seria isso?

E outra, quando utilizo JPanels, da muito trabalho pra alinhar 2 JPanels, de forma que ambos fiquem alinhados ao tamanho do JFrame (com o layout definido em Absoluto). Eu até consigo manipular esses JPanels com setVisible() pra mostrar um e esconder o outro, só que as vezes um JPanel acaba entrando dentro do outro JPanel, tem como alinha-los no mesmo lugar, sem ter esse problema?

D
Solucao aceita

Eu não usaria herança. A ideia de usar JPanels é de criar grupo de componentes e manipula-los como um grupo, outro exemplo:

class CadastroDeClienteJPanel extends JPanel {
  // componentes comuns
  DadosPessoaisJPanel dadosPessoais; // contém campos para nome, cpf, sexo, ...
  ContatoJPanel contato; // contém campos para telefone, email, ...
  EndereçoJPanel endereço; // rua, cidade, estado

  public CadastroDeClienteJPanel () {
    setLayout(new GridLayout(3,1));
    add(dadosPessoais);
    add(contato);
    add(endereço);
  }
}

E esses componentes podem ser reutilizados em outros componentes, como o de atualização.

Se o layout for “absoluto”, então é melhor usar somente um JPanel com layout absoluto, não recomendo que use diretamente num JFrame.

Se os componentes precisam ser movidos através do mouse, use o JInternalFrame se possível.

A

Com esse exemplo aí consegui resolver, agora ficou organizado. Obrigado pessoal.

Criado 26 de março de 2018
Ultima resposta 29 de mar. de 2018
Respostas 5
Participantes 3