Boa tarde pessoal, a um tempo venho tirando duvidas neste forum para criação de um componente personalizado que estou criando.
Se trata de um visualizador e manipulador de grafos/arvores. Bem estava tudo dando certo no desenvolvimento porem eu fiz um teste com um grafo mais complexo e ele pesou muito. O que devo procurar a respeito de otimização em parte grafica? Posso disponibilizar o código tambem caso alguem queira ver ou mexer.
Estas duas imagens mostram um grafo gerado onde todos os nós se combinam com todos os nós. A função Drag & Drop está habilitado para os nós e as linhas sao objetos clicaveis
public void setLineFull(Point p1, Point p2){
a = p1;
b = p2;
int width = (int) (Math.abs(p2.getX()-p1.getX())*2+this.brushSize);
int height = (int) (Math.abs(p2.getY()-p1.getY())*2+this.brushSize);
double ang = Math.PI+Math.atan2(p1.getY()-p2.getY(),p1.getX()-p2.getX());//Determina o angulo
this.setSize(width,height);//Determina o tamanho
AffineTransform rotate = new AffineTransform();
this.setShape(new Rectangle2D.Float(width/2, height/2-2,(float) p1.distance(p2),(float) this.brushSize));
p1.translate((int) (-width / 2 + this.brushSize / 2),(int) (-height / 2 + this.brushSize / 2));
this.setLocation(p1);
rotate.rotate(ang,width/2, height/2);
this.setShape(rotate.createTransformedShape(this.getShape()));
this.repaint();
}
Essa é o método que eu criei pra criar as linhas a partir de dois pontos. O problema dele nao ser tao trivial o quao deveria é que a linha é um objeto clicavel e para sobrescrever o método contains da JComponent eu precisei de ter um shape com área e nao somente uma linha
O grande problema é quando se arrasta um dos nós (as linhas acompanham) o processo fica extremamente pesado. Algumas medidas que estou pensando é desabilitar o antiAliasing e substituir as linhas shapes por linhas comuns durante o arraste.
Fala ai tabocu blz?
Cara somente uma idéai…tenta dar uma pesquisada como funciona a propriedade setDragMode do componente JDesktop. Este problema que você está colocando acontece quando se usa JInternalFrame também, ao arrastar fica bem pesado dependendo da complexidade da tela. Talvez possa te ajudar.
Abraços
O problema não é exatamente no Drag da bolinha e sim no redesenho das linhas que tem que acompanhar as bolinhas
e a biblioteca vai ter que ser tanto pra web quanto desktop.