【问题标题】:JUNG: unpicked vertex label colorJUNG:未选取的顶点标签颜色
【发布时间】:2012-08-07 12:20:39
【问题描述】:

我可以使用这样声明的 vertexLabelRenderer 将 picked 顶点标签设为红色:

DefaultVertexLabelRenderer vertexLabelRenderer=new DefaultVertexLabelRenderer(Color.RED);

如何更改未选取顶点标签的颜色。构造函数(见下文)只允许定义 unpicked 顶点标签。方法 setForeground() 也不会影响字体颜色。

这里是 JUNG 2.0.1 API 文档: http://jung.sourceforge.net/site/apidocs/edu/uci/ics/jung/visualization/renderers/DefaultVertexLabelRenderer.html

【问题讨论】:

  • 我创建了一个新类 MyDefaultVertexLaberRenderer,其中有一个附加字段“protected Color unpickedVertexLabelColor = Color.black;”。通过对 DefaultVertexLabelRenderer.java 进行简单的修改,这解决了这个问题。请告诉我是否有不涉及篡改 JUNG 库的解决方案。
  • 您的解决方案不涉及篡改 JUNG,您只是在提供自己的类。 JUNG 不可能在它提供的类中提供所有可能的选项;似乎编写自己的类(正如您所说,这是对现有类的微不足道的修改)是一个合理的解决方案。

标签: colors label renderer jung vertex


【解决方案1】:

对于仍然摸不着头脑的人,这里有两个简单的类可以更改未选取的顶点/边缘标签颜色。

public class MyDefaultVertexLaberRenderer extends DefaultVertexLabelRenderer
{
    protected Color unpickedVertexLabelColor = Color.BLACK;

    public MyDefaultVertexLaberRenderer(Color unpickedVertexLabelColor, Color pickedVertexLabelColor)
    {
        super(pickedVertexLabelColor);
        this.unpickedVertexLabelColor = unpickedVertexLabelColor;
    }

    public <V> Component getVertexLabelRendererComponent(JComponent vv, Object value, Font font, boolean isSelected, V vertex)
    {
        super.setForeground(unpickedVertexLabelColor);
        if (isSelected) setForeground(pickedVertexLabelColor);
        super.setBackground(vv.getBackground());
        if (font != null)
        {
            setFont(font);
        }
        else
        {
            setFont(vv.getFont());
        }
        setIcon(null);
        setBorder(noFocusBorder);
        setValue(value);
        return this;
    }
}

public class MyDefaultEdgeLaberRenderer extends DefaultEdgeLabelRenderer
{
    protected Color unpickedEdgeLabelColor = Color.BLACK;

    public MyDefaultEdgeLaberRenderer(Color unpickedEdgeLabelColor, Color pickedEdgeLabelColor)
    {
        super(pickedEdgeLabelColor);
        this.unpickedEdgeLabelColor = unpickedEdgeLabelColor;
    }

    public <E> Component getEdgeLabelRendererComponent(JComponent vv, Object value, Font font, boolean isSelected, E edge)
    {
        super.setForeground(unpickedEdgeLabelColor);
        if (isSelected) setForeground(pickedEdgeLabelColor);
        super.setBackground(vv.getBackground());

        if (font != null)
        {
            setFont(font);
        }
        else
        {
            setFont(vv.getFont());
        }
        setIcon(null);
        setBorder(noFocusBorder);
        setValue(value);
        return this;
    }
}

【讨论】:

  • 您好,谢谢您的回答,请问您如何使用那段代码?
  • 您所要做的就是将每个类复制到一个单独的 java 源文件中,然后使用它们的实例化,您会说: vv.getRenderContext().setVertexLabelRenderer(new MyDefaultVertexLaberRenderer(Color.RED, Color 。蓝色的)); vv.getRenderContext().setEdgeLabelRenderer(new MyDefaultEdgeLaberRenderer(Color.RED, Color.BLUE));其中 vv 是您的 VisualizationViewer 实例,红色是未选择的颜色,蓝色是选择的颜色。希望对您有所帮助。
【解决方案2】:

这是另一种设置未选取顶点标签颜色的方法(为红色):

vv.setForegroundColor(Color.red);

顶点(和边缘)标签使用 JLabel,它们从可视化查看器中获取前景色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-13
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 2017-03-26
    • 1970-01-01
    相关资源
    最近更新 更多