Настройка выбора графических элементов JGraph(T)

У меня возникла проблема с использованием библиотеки JGraph(T). Мне нужно изменить представление выбора по умолчанию, например: фон по умолчанию имеет оранжевый цвет, если выбрана вершина, то была добавлена ​​зеленая рамка, могу ли я изменить эту стратегию визуализации, чтобы изменить фон на Color.BLUE для выбранного элемента. Я пытаюсь выполнить следующий код:

 GraphSelectionModel graphSelectionModel = new DefaultGraphSelectionModel(jGraph);
    graphSelectionModel.setSelectionMode(GraphSelectionModel.MULTIPLE_GRAPH_SELECTION);
    graphSelectionModel.addGraphSelectionListener(new GraphSelectionListener()
    {
        HashMap oldestCellsAndAttrs = new HashMap();
        @Override
        public void valueChanged(GraphSelectionEvent e)
        {
            jGraph.getModel().beginUpdate();
            m_jgAdapter.edit(oldestCellsAndAttrs, null, null, null);
            oldestCellsAndAttrs.clear();
            Map cellAndAttrs = new HashMap();
            for (Object obj : e.getCells())
            {
                DefaultGraphCell cell = (DefaultGraphCell) obj;
                oldestCellsAndAttrs.put(cell, JGraphModelAdapter.createDefaultVertexAttributes());
                Map attrs = cell.getAttributes();
                GraphConstants.setBackground(attrs, Color.BLUE);
                cellAndAttrs.put(cell, attrs);
            }
            m_jgAdapter.edit(cellAndAttrs, null, null, null);
            jGraph.getModel().endUpdate();
        }
    });
    fillGraph(tree, g);
    layout(g, m_jgAdapter, jGraph);
    setSize(3 * width / 4, height);
    jGraph.setSelectionModel(graphSelectionModel);

Это изменяет bkg на тех же выбранных объектах, но не возвращается после невыбора. Существует ли решение по умолчанию для этой проблемы?


person Anatoliy Semenov    schedule 22.02.2012    source источник


Ответы (1)


Я решаю проблему с дурацким кодом:

            @Override
        public void valueChanged(GraphSelectionEvent e)
        {
           Object[] cells = e.getCells();
            HashMap<DefaultGraphCell, AttributeMap> cellsAndAttrs = new HashMap<DefaultGraphCell, AttributeMap>();
            for (Object c : cells)
            {
                DefaultGraphCell cell = (DefaultGraphCell) c;
                AttributeMap cellAttrs = cell.getAttributes();
                if (jGraph.isCellSelected(cell))
                    GraphConstants.setBackground(cellAttrs, SELECTED_COLOR);
                else
                    GraphConstants.setBackground(cellAttrs, NON_SELECTED_COLOR);
                cellsAndAttrs.put(cell, cellAttrs);
            }
            m_jgAdapter.edit(cellsAndAttrs, null, null, null);
        }
person Anatoliy Semenov    schedule 23.02.2012