Jump to content

[Resolvido] Mostrar um ArrayList de Objetos que desenha imagens com canvas em JavaFX


mirador_22
 Share

Recommended Posts

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 by mirador_22
Link to comment
Share on other sites

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 by mirador_22
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.