mirador_22 Posted June 6, 2014 at 11:11 PM Report Share #558517 Posted June 6, 2014 at 11:11 PM (edited) Ola a todos, peço desculpa pelo titulo da duvida e como já tinha postado alguns tópicos anteriormente sobre o desenho de formas em Java e agora estou desenvolvendo o mesmo trabalho em JavaFX com os desenhos das formas em canvas, já desenvolvi uma boa parte da aplicação e agora só falta mostrar as formas criadas resumidamente,tenho uma super Classe com um metodo abstracto desenharFormas public abstracta class FormaGeometrica{ //metodo abstracto public abstract void desenharFormas(GraphicsContext gc); } Classe Circulo que herda o construtor e o metodo desenhaFormas public class Circulo extends FormaGeometrica{ @Override public void desenharFormas(GraphicsContext gc) { } } Classe Triangulo que herda o construtor e o metodo desenhaFormas public class Circulo Triangulo FormaGeometrica{ @Override public void desenharFormas(GraphicsContext gc) { } } e depois uma classe FormaComposta que contem um ArrayList<FormaGeometricas> public class FormaComposta{ List<FormaGeometricas> formas; public FormaComposta(){ formas = new ArrayList<>(); } // contem construtor e contem um metodo para adicionarFormas public void adicionarFormas(FormaGeometricas elemento){ formas.add(elemento); } } A minha duvida é apartir aqui na classe TesteFiguras public class TesteFiguras extends Application { @Override public void start(Stage primaryStage) { List <FormaGeometrica> forma = new ArrayList<>(); Ponto2D p1 = new Ponto2D(260, 260); int raio = 100; Circulo circulo = new Circulo(p1, Color.BLACK, raio); Ponto2D p2 = new Ponto2D(400, 350); int tamanho = 100; Triangulo triangulo = new Triangulo(p2, Color.BLACK, tamanho); FormaComposta formaComposta = new FormaComposta(); formaComposta.adicionarFormas(circulo); //adicionar circulo formaComposta.adicionarFormas(triangulo); //adicionar triangulo Canvas imagem = new Canvas(); imagem.setHeight(500); imagem.setWidth(700); GridPane.setHalignment(imagem, HPos.CENTER); GraphicsContext gc = imagem.getGraphicsContext2D(); gc.setFill(Color.BLACK); gc.fillRect(0, 0, imagem.getWidth(), imagem.getHeight()); gc.setFill(Color.WHITE); gc.fillRect(1, 1, imagem.getWidth() - 2, imagem.getHeight() - 2); circulo.desenharFormas(gc); // isto deu certo, triangulo.desenharFormas(gc); // isto deu certo, //A duvida é aqui for (FormaGeometrica formas : forma) { // mas a forma correta será assim ou não formas.desenharFormas(gc); } BorderPane root = new BorderPane(); root.setCenter(imagem); Scene scene = new Scene(root, 720, 520); primaryStage.setTitle("PAINT"); primaryStage.setResizable(false); primaryStage.setScene(scene); primaryStage.show(); } /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } } os valores introduzidos foram apenas para testar o projeto Na Classe TesteFiguras, criei duas formas circulo e triangulo e depois adicionei-os a formaComposta. foi criado um canvas para desenhar as formas e mostrar no teste do projeto depois de criado e adicionado as duas formas, coloquei assim e circulo.desenharFormas(gc); triangulo.desenharFormas(gc); e mostra o resultado assim http://postimg.org/image/cbwo4qg8n/, como eu pretendo desenvolver o projeto A minha Duvida sendo a classe triangulo e circulo filhas da Classe FormaGeometrica e a FormaComposta que contem uma List<FormaGeometrica>, coloquei assim for (FormaGeometrica formas : forma) { formas.desenharFormas(gc); } e não mostra nada, http://postimg.org/image/60eezl7ln/ Alguma ideia, eu agradecia. Edited June 7, 2014 at 09:41 AM by mirador_22 Link to comment Share on other sites More sharing options...
mirador_22 Posted June 7, 2014 at 09:35 AM Author Report Share #558536 Posted June 7, 2014 at 09:35 AM (edited) Algum colega me tinha dito que o problema é que eu estou adicionando as formas em FormaComposta, mas não em forma(que é o ArrayList que eu utilizo no for), por isso tenho que trocar as intruções: formaComposta.adicionarFormas(circulo); //adicionar circulo formaComposta.adicionarFormas(triangulo); //adicionar triangulo Para: forma.add(circulo); //adicionar circulo forma.add(triangulo); //adicionar triangulo mas não esqueçamos que a classe FormaComposta contém um public class FormaComposta(){ List <FormaGeometricas> formas; // list de formas geometricas public FormaComposta(){ this.formas = new ArrayList<>(); // criada um arrayList } @Override public int tamanho() { return this.formas.size(); } //metodo adicionarFormas public void adicionarFormas(FormaGeometrica elemento) { this.formas.add(elemento); } @Override public List<FormaGeometrica> elementos() { ArrayList<FormaGeometrica> lista = new ArrayList(this.formaGeometrica); Collections.sort(lista); return lista; } } por isso que no main fiz assim formaComposta.adicionarFormas(circulo); //adicionar circulo formaComposta.adicionarFormas(triangulo); //adicionar triangulo Edited June 7, 2014 at 10:06 AM by mirador_22 Link to comment Share on other sites More sharing options...
mirador_22 Posted June 7, 2014 at 09:55 AM Author Report Share #558538 Posted June 7, 2014 at 09:55 AM (edited) eu fiz assim e deu certo for(int i=0; i<formaComposta.tamanho; i++){ FormaGeometrica forma= formaComposta.elementos().get(i); forma.desenhar(gc); } Edited June 7, 2014 at 05:03 PM by mirador_22 Link to comment Share on other sites More sharing options...
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