Gente possuo uma aplicação aqui que estou brincando com ela, eu tenho uma opção no programa que se chama “Eraser”, que conforme o usuario passa, ele pinta por cima da imagem…
Explicando o que está acontecendo:
-
Possuo uma pilha com todos os tipos de elementos que foram criados, todos mesmo…
-
Tenho uma classe que se chama Eraser, nessa classe tem uma Lista de Points (List<Points> ).
2.1) Quando se clica na tela, cria-se um novo Objeto do tipo Eraser.
2.2) Enquanto se estiver arrastando o mouse, ele vai criando um “new Point” e inserindo na lista do Objeto Eraser que foi criado anteriormente quando clicou na tela.
2.3) Depois que o usuario solta o mouse, ele termina essa classe do tipo Eraser…
Este processo é repetido toda ves com as mesmas ações, porém esta extremamente custoso por que quando eu chamo o metodo paintComponents(Graphics g), ele repinta toda a pilha e quando chega nos Objetos do tipo Eraser ele tem que pintar todos os Pontos que foram adicionados nas Listas dos objetos Eraser…
See it:
for (Point j : ((Eraser) i).getEraserList()) {
copy.fillOval((int) j.getX(), (int) j.getY(), ((Eraser) i).getSize(), ((Eraser) i).getSize());
}
Eu infelizmente não estou conseguindo pensar numa maneira de que fique pouco custosa essa parte da Eraser aii…
Será que alguem poderia me ajudar ?
Classe da Eraser ( Borracha ):[code]
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.image.BufferedImage;
import java.util.LinkedList;
import java.util.List;
public class Eraser implements Shape {
private Color color;
private int size;
private List<Point> eraserList;
public Eraser(Point start, int size, Color color) {
this.color = color;
this.size = size;
this.eraserList = new LinkedList<Point>();
ajustPreferedSize(start);
this.eraserList.add(start);
}
public void addPoint(Point p) {
ajustPreferedSize(p);
this.eraserList.add(p);
}
public Color getColor() {
return color;
}
public int getSize() {
return size;
}
public List<Point> getEraserList() {
return eraserList;
}
private void ajustPreferedSize(Point p) {
p.move((int) (p.getX() - Math.ceil(((double) size / 2.))), (int) (p.getY() - Math.ceil(((double) size / 2.))));
}
}
[/code]