Pergunta

Atualmente estou usando Jung para desenhar gráficos (eu realmente quero dizer não gráficos gráficos!). O problema é que Vertex e EDGE rótulos são sobrepostos com os vértices e as bordas. Isto leva a gráficos de aparência estranha. O problema não está vinculado a um determinado layout-Algorithm (embora eu tenho usado FRLayout).

Existem possibilidades para contar JUNG para evitar essas sobreposições? Eu esperava que isso já está implementado e o único problema é encontrar as opções corretas!

Foi útil?

Solução

(A resposta a seguir pressupõe Jung2, eu não estou familiarizado com pré-Jung2).

Um dos pontos fortes de Jung é que ele é muito extensível e facilmente estendido. Jung permite que você conecte vários transformadores (propriedades de renderização simples), prestadores (tornando mais complexo), e assim por diante, para personalizar o comportamento quando o padrão não é muito justo. Estes são normalmente instalados no RenderContext (que você pode obter de seu VisualizationViewer).

Por outro lado, suas desvantagens são a sua complexidade e falta de documentação decente. Se você estiver indo para fazer qualquer moderada a personalização pesado, você precisa cavar a fonte Jung.

Por exemplo, a prestação rótulo vértice pode ser personalizado por conectar um novo renderizador rótulo vértice (interface de Renderer.VertexLabel). Por exemplo, você pode criar uma instância BasicVertexLabelRenderer e especificando uma posição diferente (norte, oeste, centro, etc.). Você poderia colocar sua etiqueta no centro, se você estiver disposto a mudar a forma em algo maior do que o círculo (para fazer isso, instale sua própria forma vértice transformador - uma instância de Transformer). Alternativamente, você pode criar sua própria implementação personalizada desta interface que torna um fundo sob o texto do rótulo.

Você também pode instalar sua própria versão beliscada de Renderer.EdgeLabel (veja BasicEdgeLabelRenderer de Jung) para personalizar o posicionamento da etiqueta borda.

Outras dicas

Você só precisa definir o rótulo offset:

vv.getRenderContext().setLabelOffset(20);

Onde vv é o VisualizationViewer objeto.

a propósito, se você quer mudar a cor, a princípio parece ser uma grande dor. mas eu descobri recentemente este pequeno truque:

Transformer labelTransformer = new ChainedTransformer<String,String>(new Transformer[]{
            new ToStringLabeller<String>(),
            new Transformer<String,String>() {
            public String transform(String input) {
                return "<html><font color=\"yellow\">"+input;
            }}});

context.setVertexLabelTransformer(labelTransformer);

Eu acho que isso é apenas como suas implementadas, os autores do código provavelmente não vê-lo como um problema. A biblioteca JUNG é open-source que você está convidado a fazer alterações nele, como você vê o ajuste.

Se você não quiser alterar o código de um reparo fácil para fazer os rótulos mais legível seria a de simplesmente mudar a cor dos rótulos, para que eles diferem das bordas.

Eu encontrei o mesmo problema de Borda Etiquetas sobrepostas. Uma solução rápida e suja I usado para posicionar os rótulos de margem seja por preenchimento de um determinado comprimento com espaços em branco no valor de cadeia.

//pad some white spaces to value of edge when adding edges to the graph
graph.addEdge(String.format("%-35s", "Edge-A"), 1, 2);

Ele vai evitar os rótulos de ponta de nublado e sobrepostos no centro especialmente quando a construção de um grafo bipartido. Espero que isso ajude alguns de vocês lá fora!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top