как использовать статический макет в Graphstream

1

Я хотел бы генерировать статический график, используя GraphStream. Есть ли какие-либо предложения?

Я читаю входные данные из файла DGS (сгенерированные из другой модели). Поскольку количество узлов не исправляется каждый раз, и я не хочу вручную указывать каждую позицию каждого узла. В настоящее время я могу использовать функцию автоопределения для размещения узлов, и результат в порядке, но проблема заключается в следующем: каждый узел может быть перемещен, если щелкнуть узел и перетащить его. Есть ли способ генерировать граф, используя автозапуск, и узел одновременно не перетаскивается?

Заранее спасибо!

Теги:
graph
static
graphstream

2 ответа

2
Лучший ответ

Для того, чтобы предотвратить взаимодействие пользователя с просмотром по умолчанию, необходимо указать новый MouseManager, в умолчанию View, что на самом деле ничего не делает.

Поскольку вы не можете установить null MouseManager (он будет порождать по умолчанию), вам нужно создать новый класс, который в основном ничего не делает и не дает его View.

Грязный способ сделать это:

graph.display()
    .getDefaultView()
    .setMouseManager(new MouseManager(){
        @Override
        public void mouseClicked(MouseEvent e) {}
        @Override
        public void mousePressed(MouseEvent e) {}
        @Override
        public void mouseReleased(MouseEvent e) {}
        @Override
        public void mouseEntered(MouseEvent e) {}
        @Override
        public void mouseExited(MouseEvent e) {}
        @Override
        public void mouseDragged(MouseEvent e) {}
        @Override
        public void mouseMoved(MouseEvent e) {}
        @Override
        public void init(GraphicGraph graph, View view) {}
        @Override
        public void release() {}
    });
  • 0
    Спасибо за ваш ответ. Я думаю, у меня есть ключ, чтобы это исправить!
  • 0
    Кстати, вы можете взглянуть на мой другой вопрос о GS? Конечно, если у вас есть время: stackoverflow.com/questions/28478936/…
Показать ещё 1 комментарий
0

Это вдохновлено ответом @Yoann, но это лучший способ выполнить работу. Если вы просто хотите ограничить некоторые действия мыши, вы можете сделать следующее:

ViewPanel viewPanel = graph.display().getDefaultView();
MouseManager manager = new DefaultMouseManager() {

    @Override
    public void mouseDragged(MouseEvent event) {

    }

    @Override
    protected void mouseButtonPress(MouseEvent event) {
        super.mouseButtonPress(event);

        System.out.println("Press");
    }

    @Override
    public void mouseClicked(MouseEvent event) {
        super.mouseClicked(event);
        System.out.println("Clicked");
    }

    @Override
    public void mousePressed(MouseEvent event) {
        super.mousePressed(event);

        // if you need object of Node pressed, following code will help you, curElement is already defined at DefaultMouseManager.
        curElement = view.findNodeOrSpriteAt(event.getX(), event.getY());

        if (curElement != null) {
            Node node = graph.getNode(curElement.getId());
            if(node != null) {
                System.out.println("Mouse pressed at node: " + node.getId());
            }
        }

    }

};

viewPanel.setMouseManager(manager);

Здесь я отключил mouseDragged и написал свой собственный код после выполнения default mouseButtonPress, mouseClicked и mousePressed. Вы даже можете создать свой собственный класс, который расширяет DefaultMouseManaer и переопределяет нужную функцию и задает этот объект для менеджера мыши, это будет более понятный способ программирования.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню