Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > JGraph selection customization


Автор: rang3r 18.2.2012, 20:56
Всем привет.
Подскажите пж-та кто пользовался библиотекой JGraph как сделать кастосное выделение вершины графа,
стандартное обведение зеленым курсивом курсивом на оранжевом фоне слишком бледно,
попробовал написать код, для смены фона выделенного элемента на синий, выделяет нормально, но вот назад не возвращает.
Как это можно реализовать или может есть боле простой способ(проперти на модели я не нашел).
Код

        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);

Вообще надо подсвечивать путь, так что буду благодарен за подсказку как выделить еще и связь между вершинами.

Автор: rang3r 23.2.2012, 14:42
Подошло следующее решение
Код

            @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);
            }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)