przero Posted June 16, 2014 at 02:37 PM Report #559395 Posted June 16, 2014 at 02:37 PM Tenho o backend com as minhas classes e tudo mais organizado num package. Num package diferente tenho que desenvolver a GUI. Para comunicar com a package do backend, necessito de importar as classes do package backend, para o GUI...correto? No entanto, como faço para "chamar" métodos disponíveis na classed do backend? Supondo que tenho o seguinte código: public class Cao{ //restante código public void mostrarCaes() { for(Cao cao: caes){ System.out.println(cao.toString()); } } } Como faço para que na GUI, ao clicar em "Mostrar Caes", chame o método "mostrarCaes" da classe Cao? Tentei fazer isso no entanto as mensagens de diálogo não aceitam "void's". E para criar um objecto do tipo Cao e respetivos valores das variáveis (com input do user), através da GUI, como faço? Devo utilizar outra estratégia?
Rui Carlos Posted June 16, 2014 at 04:49 PM Report #559408 Posted June 16, 2014 at 04:49 PM Tens aí um bom exemplo para mostrar por que é que não deves fazer prints nas classes que implementam a lógica da aplicação. Tu meteste um print para o System.out, mas agora estás a fazer uma GUI, que obviamente não se baseia no System.out, e dá asneira. Essa classe devia devolver uma lista de valores. Depois na classe que trata da interface com o utilizador, decides como apresentar a lista de valores. Se estás a fazer uma GUI, à partida não vais fazer prints. Para ajuda mais concreta, vais ter que indicar que tipo de bibliotecas/abordagens estás a usar para criar a GUI. 1 Report Rui Carlos Gonçalves
FQueiros Posted June 17, 2014 at 11:49 AM Report #559455 Posted June 17, 2014 at 11:49 AM (edited) Supostamente a GUI não precisa de conhecer a tua classe Cao, o que não quer dizer que não possa conhecer se te facilitar o trabalho, mas isto implica que a GUI depois não fique portável para outros projetos. Tu para mostrar os resultados da classe Cao na Gui podias fazer algo como ter uma Classe Interface que tem todos os métodos que tu queres utilizar na GUI. Interface IFachada{ public String mostraCaes(); } Depois terias de ter uma classe que extenda a IFachada, e é nesta classe que tu metes todos os métodos que vais querer utilizar na GUI public class Fachada implements IFachada{ public String mostraCaes(){ //obtens o objeto Cao return cao.mostraCaes(); } } Assim a interface vai interagir com a classe IFachada e vai receber uma String, e fazes com esse resultado o que quiseres na GUI. Isto é uma forma utilizando um padrão. Caso tu pretendas de uma forma rápida, basta na GUI acederes ao objeto Cao e chamares o metodo mostraCaes() mas não podes usar o system.out, pois isso não te vai escrever nada na GUI, terás de retornar algum valor para depois apresentares em algum componente na GUI. Tu para criares o objeto Cao com input do User, terás de ter uma janela ou frame com um formulário por exemplo com campos para o user preencher, depois terás um botão para guardar esses dados, é no evento desse botão que tu vais ler os dados e preencher o objeto Cao. (Caso utilizasses a fachada de comunicação terias de ler os dados dos input e no evento do botão chamar um método da IFachada que te recebesse esses dados e depois na lógica cria-se o objeto cão, assim a GUI não conhecia a classe cão). Edited June 17, 2014 at 11:53 AM by FQueiros 1 Report
przero Posted June 18, 2014 at 12:28 PM Author Report #559590 Posted June 18, 2014 at 12:28 PM (edited) Obrigado por ambas as respostas. Já entendi como se criam objetos usando a GUI, já os consigo criar. No entato, como é que faço para adicionar os elementos criados na minha GUI a um ArrayList da classe "ListaCaes" para posteriormente, nouta janela, os imprimir? Relembro que a classe "ListaCaes" (onde eu tenciono ter o tal ArrayList) e a GUI estão em packages distintos. Edited June 18, 2014 at 12:40 PM by przero
FQueiros Posted June 18, 2014 at 01:19 PM Report #559599 Posted June 18, 2014 at 01:19 PM (edited) após teres um objeto ListaCaes criado basta teres um arrayList do tipo ListaCaes e adicionares o objeto ao array. ex: ArrayList<ListaCaes> lista = new Arraylist(); lista.add(Objeto lista cães que criaste); Se a tua duvida era como adicionar o objeto cão ao objeto ListaCaes podes criar um metodo dentro da classe ListaCaes, em que recebe o objeto Cao e guarda-o nos atributos dessa classe, para depois quando acederes a esse objeto ListaCaes teres lá o Cão e outros atributos que possas necessitar. Agora se a tua dúvida era, criar uma lista de objetos cao, podes simplesmente criar o ArrayList do tipo Cao, sem necessitares da classe ListaCaes. E o teu arraylist vai guardar todos os caes criados. Era isto que tinhas dúvidas? posso não ter percebido a tua dúvida. 🙂 Edited June 18, 2014 at 01:25 PM by FQueiros 1 Report
przero Posted June 18, 2014 at 02:03 PM Author Report #559611 Posted June 18, 2014 at 02:03 PM Obrigado pela resposta. A minha duvida não era como criar a ArrayList propriamente dito, eu não fui muito específico. Entretanto acho que já conseguir resolver esta questão. Resolvi criar uma ArrayList dentro da própria classe GUI em vez de recorrer às classes lógicas (backend), penso que não haja problema em tal porque está a facilitar-me imensamente o raciocínio 🙂
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now