Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

zasuk

[Ajuda] Alterar Jpanel de interface

Mensagens Recomendadas

zasuk

Boas...

tenho que desenvolver um projecto para a faculdade e surgiu uma pequena duvida...

Passo a explicar:

tenho que fazer uma interface para um software de gestão...e sem ter um menu por tabs não sei como alterar o aspecto da interface, ou seja, tenho um determinado Jpanel activo onde estão todos os componentes...mas ao clicar num botão gostaria de trocar para outro Jpanel com outros componentes e outras funções.

É possivel fazer desta maneira ou os componentes tem que estar todos no mesmo Jpanel e e apenas oculto e activo componentes com o clicar de um botao...se for assim é complicado gerir o aspecto da janela.

Alguém pode dar uma ajudinha...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Na prática, basta ires trocando a instância do JPanel que está adicionado à JFrame.

Desenhas os JPanel que precisas e nas acções dos botões, alteras o JPanel que está defino na JFrame.

No entanto, este tipo de operações vai precisar de alguns cuidados para que a janela se adapte aos novos componentes, por exemplo, cada vez que alterares o JPanel deves invocar o método validate() na JFrame, e possivelmente o pack().

Estás a usar algum IDE para desenhar as interfaces ou estás a desenhar tudo à mão?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
zasuk

sim, estou a usar o Net Beams...se fosse tudo á mão estava desgraçado porque o programa tem muitas funcionalidades.

Já agora, tenho a camada de negocio já desenvolvida em que tenho uma classe com todos os métodos necessários para lidar com as conexões e querys da base de dados, e tenho uma classe para cada tabela da minha base de dados, de modo a puder criar e remover entradas da BD. Supondo que pretendo listar todos os clientes de uma tabela Clientes, devo ter um método Static na classe cliente, ou faço esta listagem directamente na interface?

Para mim isto é um bocado novo, sei programar o que quero sem problemas...a dificuldade é saber qual a maneira considerada "correcta" de implementar...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Se estás a usar o NetBeans, podes usar as capacidades do IDE para desenhar cada um dos paineis.

A forma "correcta" depende um pouco do que estás a fazer, e acaba por depender também da visão de cada um, pessoalmente não considero os métodos estáticos uma opção correcta. Se é estático é porque é um método para  classe, e os métodos de acesso a BDs lidam com instâncias, portanto serão métodos de instância.

Se tens um modelo todo já implementado, então deves ter uma classe "principal" que tem os métodos para pesquisa/listagem que precisas.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
zasuk

Recorrendo a um exemplo simples para explicar como estou a proceder para desenvolver o meu trabalho:

supondo que tenho uma tabela Cliente, produto e encomenda na base de dados, irei também as classes CLIENTE, PRODUTO e ENCOMENDA implementadas em java, com métodos que me permitem criar,remover,alterar, ler (por id, sendo necessário conhecer o id para fazer a pesquisa) uma entrada da base de dados relativa a cada uma das classes.

Portanto supondo que pretendo na interface criar um novo cliente na base de dados, basta-me criar um novo objecto cliente que ele é inserido automaticamente na base de dados (que desenhei em oracle e tem todas as triggers necessárias para o negocio, bem como atribuir chaves primarias automaticamente).

Caso queira fazer uma listagem de todos os clientes tenho o tal metodo static na classe cliente que me retorna um resultset, portanto para evitar isso (também não acho uma boa implementação) sugeres que crie uma nova classe que me permita simplesmente fazer uma listagem completa de cada tabela?? é isso ou entendi mal??  :D

Por acaso já vi que o net beams me cria o CRUD automaticamente, mas apenas o faz para uma tabela, e acho o código criado um pouco confuso.

tu que és o rei do java, como sugeres que faça?? :P é que não gosto de fazer as coisas de maneira a que apenas funcionem.....gosto de fazer logo bem feito e bem implementado...

obrigado pela ajuda :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Acho que entendeste mal.

Supondo que estamos a desenvolver uma agenda, vais ter uma classe para os contactos, que é mapeada para uma tabela na BD. Além de todos os métodos necessários a esta classe dependendo da implementação, vais ter os típicos métodos CRUD. Digo dependendo porque tanto pode ser a classe Contacto (a classe que mapeia para a tabela Contacto) a ter os método CRUD, como ter uma classe, por exemplo DataContacto, que tem esses métodos. De qualquer uma das formas, estas classes deverão ser instanciadas para serem usadas, isto é, os seus métodos não devem ser estático. Além do método de inserção, de update, de delete, tipicamente tenho dois métodos, um que pesquisa por ID um que pesquisa todos. É comum veres isso em aplicações empresariais que usem JEE, tipicamente o findById() e o findAll().

Mas estes são os métodos das classes base, o que referia é que, além destas classes base, é necessário uma classe que represente a aplicação. No exemplo, ia ser necessário uma classe que representa a agenda, por exemplo Agenda, que tem os métodos de pesquisa e de listagem. Esta classe Agenda representa a tua aplicação e é a classe principal do modelo de dados, é através dela que todos os métodos são invocados, para todos os efeitos, esta é a aplicação. Desta forma, podes colocar qualquer interface em cima e nunca tens a interface presa aos dados que estão por baixo.

Tentando dar uma sequência, na interface gráfica tens um botão para listar tudo, a acção desse botão invoca um método de listagem na classe Agenda, que irá listar todos os dados, usando o método de acesso correcto e que é fornecido pelas classes que mapeiam para as tabelas.

Agora, tudo isto é uma forma de fazer, não é A forma de fazer, não há soluções perfeitas, apenas soluções que tentam, o mais possível, resolver o problema.

Já agora, isto não tem muito a ver com Java especificamente, e eu não sou rei de nada :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
zasuk

obrigado, acho que já está entendido....de certo modo estou a implementar como referiste, tirando o facto de não ter a classe que é a aplicação em si. Penso que vou omitir essa classe e fazer directamente na interface as coisas...isto não é para sofrer futuros updates, por isso não há problemas :thumbsup:

Obrigado pela ajuda  :cheesygrin:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.