[Ajuda] Desenhar Circulos no Jgraph

8 respostas
Bigu

Boa tarde.

Estou tentando inserir um JComponent dentro de uma Cell do Jgraph, mas ao invés de aparecer o componente, aparece o Jcomponent.toString() .

A minha intenção aqui é que neste exemplo abaixo, ao invés das formas serem quadrados… elas sejam circulos, para isso eu pensei em criar um JComponent circulo e inseri-lo dentro das células…

Segue abaixo o código

import java.awt.Color;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import org.jgraph.JGraph;
import org.jgraph.graph.DefaultCellViewFactory;
import org.jgraph.graph.DefaultEdge;
import org.jgraph.graph.DefaultGraphCell;
import org.jgraph.graph.DefaultGraphModel;
import org.jgraph.graph.DefaultPort;
import org.jgraph.graph.GraphConstants;
import org.jgraph.graph.GraphLayoutCache;
import org.jgraph.graph.GraphModel;

public class Main {

    public static void main(String[] args) {

        GraphModel model = new DefaultGraphModel();

        GraphLayoutCache view = new GraphLayoutCache(model, new DefaultCellViewFactory());
        JGraph graph = new JGraph(model, view);
        DefaultGraphCell[] cells = new  DefaultGraphCell[3];
        cells[0] = new DefaultGraphCell(new String("Hello"));
        GraphConstants.setBounds(cells[0].getAttributes(), new Rectangle2D.Double(20, 20, 40, 20));
        GraphConstants.setGradientColor(cells[0].getAttributes(), Color.orange);
        GraphConstants.setOpaque(cells[0].getAttributes(), true);
        GraphConstants.setSizeable(cells[0].getAttributes(), false);
        
        DefaultPort port0 = new DefaultPort();
        cells[0].add(port0);

        cells[1] = new DefaultGraphCell(new String("World"));
       

        GraphConstants.setBounds(cells[1].getAttributes(), new Rectangle2D.Double(140, 140, 40, 20));
        GraphConstants.setGradientColor(
                cells[1].getAttributes(),
                Color.red);
        GraphConstants.setOpaque(cells[1].getAttributes(), true);
        DefaultPort port1 = new DefaultPort();
        cells[1].add(port1);
        DefaultEdge edge = new DefaultEdge();
        edge.setSource(cells[0].getChildAt(0));
        edge.setTarget(cells[1].getChildAt(0));
        cells[2] = edge;

        int arrow = GraphConstants.ARROW_CLASSIC;
        GraphConstants.setLineEnd(edge.getAttributes(), arrow);
        GraphConstants.setEndFill(edge.getAttributes(), true);
        graph.getGraphLayoutCache().insert(cells);



        JFrame frame = new JFrame();

        frame.getContentPane().add(new JScrollPane(graph));
        frame.pack();
        frame.setVisible(true);
    }
}

Desde já agradeço qualquer ajuda

Cya

8 Respostas

rodrigo.bossini

Na verdade você vai precisar estender uma das classes da JGraph. Não me lembro qual exatamente agora. Mas já li no pdf disponível no site. Dá uma olhada lá, no pdf tá explicado como fazer.

E


.

Bigu

Então, tou procurando nele a algum tempo… mas ainda não encontrei essa parte… alguma dica do que procurar especificamente?

vlw o reply

rodrigo.bossini

A página 49 do manual em pdf explica como fazer.

Bigu

Puxa… tava na minha cara XD

Muito obrigado a ajuda de vcs, salvaram minha pele

até

N

Vocês sabem como após inserir um vertice, torná-lo imóvel, isto é, não permitir que o usuário arraste os nós pelo frame.

rodrigo.bossini

Você poderia fazer algo do tipo:

GraphConstants.setSelectable(v.getAttributes(), false);//v é o vértice que você deseja tornar imóvel. Não se esqueça de adicionar v a um mapa e chamar edit no layoutCache do seu grafo para atualizar.
N

Vc teria um exemplo neste contexto, mostrando também como eu tornaria uma aresta ligada ao nó, isto é, eu posso mexer a aresta mas não desconectá-la de seu vértice. E ainda não posso criar novas arestas.

Obrigada

Criado 4 de fevereiro de 2010
Ultima resposta 27 de abr. de 2010
Respostas 8
Participantes 4