Я хотел бы генерировать статический график, используя GraphStream. Есть ли какие-либо предложения?
Я читаю входные данные из файла DGS (сгенерированные из другой модели). Поскольку количество узлов не исправляется каждый раз, и я не хочу вручную указывать каждую позицию каждого узла. В настоящее время я могу использовать функцию автоопределения для размещения узлов, и результат в порядке, но проблема заключается в следующем: каждый узел может быть перемещен, если щелкнуть узел и перетащить его. Есть ли способ генерировать граф, используя автозапуск, и узел одновременно не перетаскивается?
Заранее спасибо!
Для того, чтобы предотвратить взаимодействие пользователя с просмотром по умолчанию, необходимо указать новый 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() {}
});
Это вдохновлено ответом @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 и переопределяет нужную функцию и задает этот объект для менеджера мыши, это будет более понятный способ программирования.