在我的java项目中,我需要创建一个带有swing的GUI,我将拥有一个像space一样的画布。用户应该能够单击并创建节点,然后使用边链接节点(就像在MS Visio中创建UML图一样)。用户还应该能够将边缘移动节点。然后我的应用程序将保存网络并运行自私节点算法,用户应该能够在GUI上看到它(创建和消除边缘)。我不确定我需要使用哪种摆动工具来实现这一目标。 (可以在WPF中完成,我必须使用哪些工具)
答案 0 :(得分:5)
尝试这个
<dependency>
<groupId>jgraph</groupId>
<artifactId>jgraph</artifactId>
<version>5.13.0.0</version>
</dependency>
我们真的用这个lib创建了非常复杂的swing UI屏幕,其中有很多面向图形的结构。看看http://www.jgraph.com或直接在这里http://www.jgraph.com/images/business-large.png这是您要找的东西吗?
答案 1 :(得分:4)
如果您正在尝试“推出自己的”解决方案,我会提出一些建议:
paintComponent(...)
方法中再次将节点渲染为矩形。 由于这可能是家庭作业,我将让您完成详细信息和代码,但如果您遇到特定步骤,请随时回复您的代码。
答案 2 :(得分:4)
我建议您试用JUNG库。
我已经使用这个库(而不是JGraph
)创建了一个应用程序,因为我觉得JUNG比新手更容易学习JGraph
(即使它提供的功能更少)。我只需要简单的节点和它们之间的边缘。
看起来像这样(可能这或多或少是你想要做的):
以下是核心JUNG功能的基本代码段:
public ArchitectureEditor(String title, MainWindow mainWindow, ArchObjContextConcern contextConcern) {
super(title);
setName(NAME);
graph = new DirectedSparseGraph<ArchObject, EdgeKey>();
layout = new StaticLayout<ArchObject, EdgeKey>(graph);
vv = new AutoCropVisualizationViewer(layout); //extends VisualizationViewer<ArchObject, EdgeKey>
vv.getRenderContext().setEdgeShapeTransformer(new EdgeShape.Line<ArchObject, EdgeKey>());
VERTEX_ICON_TRANSFORMER = new ArchObjIconTransformer(vv);
VERTEX_SHAPE_TRANSFORMER = new ArchObjShapeTransformer(vv);
vv.getRenderContext().setVertexShapeTransformer(VERTEX_SHAPE_TRANSFORMER);
vv.getRenderContext().setVertexIconTransformer(VERTEX_ICON_TRANSFORMER);
graphMouse = new ArchGraphMouse(mainWindow, contextConcern);
vv.setGraphMouse(graphMouse);
vv.addKeyListener(new ArchGraphKeyboard(mainWindow, this));
vv.setBackground(Color.WHITE);
ComponentUtils.setForcedSize(vv, 1, 1);
setLayout(new BorderLayout());
add(new JScrollPane(vv));
}
图中的对象表示为: