Предварительный предохранитель. Как я могу изменить визуализацию связанных ребер при наведении курсора на узел?

Я использую этот типичный фрагмент (из примеров prefuse), чтобы изменить цвет одного из моих узлов, когда на него наведена мышь:

ColorAction nFill = new ColorAction(NODES, VisualItem.FILLCOLOR);
nFill.setDefaultColor(ColorLib.gray(255));
nFill.add("_hover", ColorLib.gray(200));

Я бы хотел установить другой цвет для краев внутри и снаружи этого узла, желательно другого цвета для входов, чем для выходов, но я не могу найти правильный предикат для использования.

Я использую ориентированный граф, если это важно.

Есть ли способ перебрать потомков / родителей текущего узла / края в API предикатов? У вас есть решение моей актуальной проблемы?


person Zukero    schedule 20.10.2014    source источник


Ответы (2)


Я нашел способ сделать это без предикатов, но создав собственный подкласс ColorAction:

class ConnectedEdgeColorAction extends ColorAction {

    final int outgoing = ColorLib.rgb(255, 100, 100);
    final int incoming = ColorLib.rgb(100, 255, 100);
    final int none = ColorLib.gray(100);

    public ConnectedEdgeColorAction(String group, String field) {
        super(group, field);
    }

    @Override
    public int getColor(VisualItem item) {
        if (item instanceof EdgeItem) {
            if (((EdgeItem) item).getSourceItem().isHover()) {
                return outgoing;
            } else if (((EdgeItem) item).getTargetItem().isHover()) {
                return incoming;
            }
        }

        return none;
    }

}

Затем я использую это в качестве основного цветового действия для моих краев:

ColorAction nEdges = new ConnectedEdgeColorAction(EDGES, VisualItem.STROKECOLOR);

Я не знаю, является ли это «предпочтительным» способом, но для меня он работает достаточно хорошо.

person Zukero    schedule 20.10.2014
comment
prefuse позволяет выполнять многие задачи, но это решение также лучшее, что я могу придумать. - person alex.rind; 21.10.2014

Другое решение могло бы пойти по линии

  • создать подкласс Action
  • вызвать это действие на узлах с предикатом _hover
  • в подклассе Action перейдите к входящим и исходящим ребрам и установите их цвет
person alex.rind    schedule 21.10.2014