Я нашел решение, используя библиотеку freeHEP и JUNG's VisualizationImageServer
:
private void doSaveAs() throws IOException {
// instantiate and configure image-able visualization viewer
VisualizationImageServer<Vertex, Edge> vis =
new VisualizationImageServer<Vertex, Edge>(this.visViewer.getGraphLayout(),
this.visViewer.getGraphLayout().getSize());
setUpAppearance(vis);
ExportDialog export = new ExportDialog();
export.showExportDialog(vis, "Export view as ...", vis, "export");
}
При вызове откроется диалоговое окно экспорта для пользователя, в котором можно выбрать каталог и тип файла.
В этом фрагменте ExportDialog имеет значение org.freehep.graphicsbase.util.export.ExportDialog
, которое вам нужно как-то найти в пути сборки, в моем случае используя maven, добавив freehep-graphicsio
в мой файл pom.
Поле this.visViewer
содержит ваш обычный экземпляр VisualizationViewer
, который вы также использовали бы для отображения графика.
Метод setUpAppearance(vis);
выполняет ту же настройку, что и я для экземпляра VisualizationViewer
, для целей отображения. Вот пример, детали, вероятно, будут отличаться для вас:
private void setUpAppearance(BasicVisualizationServer<Vertex, Edge> vis) {
vis.setBackground(BGCOLOR);
vis.setPreferredSize(new Dimension(1500, 600)); // Sets the viewing area
// modify vertices
vis.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
vis.getRenderContext().setVertexFontTransformer(Transformers.vertexFontTransformer);
vis.getRenderContext().setVertexShapeTransformer(Transformers.vertexShapeTransformer);
vis.getRenderContext().setVertexFillPaintTransformer(Transformers.vertexFillPaintTransformer);
vis.getRenderContext().setVertexDrawPaintTransformer(Transformers.vertexDrawPaintTransformer);
vis.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);
// modify edges
vis.getRenderContext().setEdgeShapeTransformer(Transformers.edgeShapeTransformer);
vis.getRenderContext().setEdgeDrawPaintTransformer(Transformers.edgeDrawPaintTransformer);
vis.getRenderContext().setArrowDrawPaintTransformer(Transformers.edgeDrawPaintTransformer);
vis.getRenderContext().setArrowFillPaintTransformer(Transformers.edgeDrawPaintTransformer);
vis.getRenderContext().setEdgeArrowPredicate(Transformers.edgeArrowPredicate);
vis.getRenderContext().setEdgeStrokeTransformer(Transformers.edgeStrokeHighlightingTransformer);
}
В качестве последнего шага вам нужно выяснить, когда следует вызвать doSaveAs
. Например, вы можете добавить кнопку в пользовательском интерфейсе для этого.