Префузия API Java создает края

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

У меня вопрос, как я могу создать ребра для этого графика?

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

Вот мой код для настройки данных для графика:

    Table nodeData = null;
    String query1 = "my_select_statement";

    try {
        nodeData = datasrc.getData(query1);

    } catch (DataIOException ex) {
        ex.getMessage();
        ex.printStackTrace();
    }

Graph graph = new Graph(nodeData, true);

1 ответ

Существует конструктор для префузионного графа, который принимает таблицу ребер, как вы предлагаете:

public Graph(Table nodes, Table edges, boolean directed)

Я предлагаю вам проверить эту очень простую матричную программу с разделителями-пробелами для справки: https://github.com/brycecr/msmexplorer/blob/master/MSMExplorer/src/edu/stanford/folding/msmexplorer/io/DatGraphReader.java

Короче говоря, вы просто создаете таблицу, но вам нужны столбцы "source" и "target", где записи в этих столбцах являются индексами с 0 индексами в таблице узлов. Создание столбцов:

m_edgeTable = new Table();
m_edgeTable.addColumn(Graph.DEFAULT_SOURCE_KEY, int.class); //0th
m_edgeTable.addColumn(Graph.DEFAULT_TARGET_KEY, int.class); //1st

назначение исходного и целевого столбцов:

m_edgeTable.addRow();
m_edgeTable.set(rowNum, 0, sourceNodeIndex);
m_edgeTable.set(rowNum, 1, targetNodeIndex);

У вас была правильная идея!

PS: Если вы пишете программу для чтения графиков, то, как вам кажется, я действительно рекомендую создавать подклассы AbstractGraphReader, Это облегчит вашу жизнь в будущем, так как вы можете использовать свой новый класс так же, как встроенные считыватели графиков.

Другие вопросы по тегам