Я создаю пользовательский интерфейс для Java-программы Swing, которая должна позволять пользователю создавать сеть узлов, соединенных ребрами. Пользователю разрешено маркировать эти узлы и ребра.
Пользовательский интерфейс в настоящее время имеет настраиваемый графический компонент, который расширяет JPanel
и имеет смысл сам по себе, имея рабочие операции, такие как масштабирование и перетаскивание. Я пытаюсь использовать библиотеку GraphStream (http://graphstream-project.org/), чтобы пользовательскую панель в View
, которая поддерживает GraphStream Graph
s. Поскольку GraphStream поставляется с классом DefaultView
, способным отображать базовые графики «из коробки», и расширяет JPanel
, я решил модифицировать свой компонент карты, чтобы он расширял DefaultView
. Итак, мое определение класса для фонового компонента теперь
public class CustomPanel extends DefaultView implements ICustomListener
{
public CustomPanel(Viewer viewer, String identifier, GraphRenderer renderer)
{
super(viewer, identifier, renderer);
...
}
}
Однако компонент не может отображать какие-либо графики или возможности рисования. Вот как я приступил к формированию тестового графика
Graph graph = new GraphicGraph("embedded");
Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_GUI_THREAD);
Node a = graph.addNode("A");
a.addAttribute("xy", 0, 0);
Node b = graph.addNode("B");
b.addAttribute("xy", 10, 0);
Node c = graph.addNode("C");
c.addAttribute("xy", 10, 10);
graph.addEdge("AB","A","B");
//This is where I assume the GraphStream magic should happen.
CustomPanel myPanel = new CustomPanel(viewer, "defaultView", Viewer.newGraphRenderer());
viewer.addView(myPanel);
myPanel.display((GraphicGraph)(graph), true);
Я могу отобразить тот же график с
viewer.addDefaultView(true);
но открывается в новом окне.
Так что же я делаю не так, или возможно ли вообще отображать графики с помощью GraphStream на пользовательских компонентах? Если есть другая библиотека, которая может это сделать, я был бы благодарен узнать. Я знаю о JUNG2 и Java2D, но еще не пробовал их. Я также мог бы жить с решением, которое открывает редактор в другом окне, но мне по-прежнему нужна моя CustomPanel в качестве фона.