JUNG: цвет метки невыбранной вершины

Я могу сделать выбранные метки вершин красными, используя vertexLabelRenderer, объявленный следующим образом:

DefaultVertexLabelRenderer vertexLabelRenderer=new DefaultVertexLabelRenderer(Color.RED);

Как изменить цвет не выбранных меток вершин. Конструктор (см. ниже) позволяет определять только не выбранные метки вершин. Также метод setForeground() не влияет на цвет шрифта.

Вот документ API JUNG 2.0.1: http://jung.sourceforge.net/site/apidocs/edu/uci/ics/jung/visualization/renderers/DefaultVertexLabelRenderer.html


person Eero T.    schedule 07.08.2012    source источник
comment
Я создал новый класс MyDefaultVertexLaberRenderer с дополнительным защищенным полем Color unpickedVertexLabelColor = Color.black;. Тривиальная модификация DefaultVertexLabelRenderer.java решает проблему. Скажите, есть ли решение, не связанное с вмешательством в библиотеку JUNG.   -  person Eero T.    schedule 07.08.2012
comment
Ваше решение не связано с вмешательством в JUNG, вы просто предоставляете свой собственный класс. JUNG не может предоставить все возможные варианты в предлагаемых классах; кажется, что написание собственного класса (который, как вы сказали, является тривиальной модификацией существующего класса) является разумным решением.   -  person Joshua O'Madadhain    schedule 09.08.2012


Ответы (2)


Для тех, кто все еще ломает голову, вот два простых класса, которые могут изменить цвет невыбранной метки вершины/ребра.

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;
    }
}
person Richy    schedule 18.12.2012
comment
Привет, спасибо за ваш ответ, но как вы используете этот фрагмент кода? - person Filip Vondrášek; 06.01.2013
comment
Все, что вам нужно сделать, это скопировать каждый класс в отдельный исходный файл Java, а затем, чтобы использовать их экземпляры, вы должны сказать: vv.getRenderContext().setVertexLabelRenderer(new MyDefaultVertexLaberRenderer(Color.RED, Color.BLUE)); vv.getRenderContext().setEdgeLabelRenderer(новый MyDefaultEdgeLaberRenderer(Color.RED, Color.BLUE)); Где vv — ваш экземпляр VisualizationViewer, красный — невыбранный цвет, а синий — выбранный цвет. Надеюсь, это поможет. - person Richy; 26.01.2013

Вот еще один способ установить цвет невыбранных меток вершин (красный):

vv.setForegroundColor(Color.red);

Метки вершин (и ребер) используют JLabel, и они получают цвет переднего плана из средства просмотра визуализации.

person Tom    schedule 16.02.2018