如何在java swing GUI中创建可移动的节点和边缘?
在我的java项目中,我需要创建一个带有swing的GUI,我将拥有一个像空间一样的画布。用户应该能够点击并创建节点,然后用边连接节点(就像你将在MS Visio中创建一个UML图)。用户还应该能够将节点与边缘一起移动。然后我的应用程序将保存网络并运行自私的节点算法,用户应该能够在GUI上看到它(创建和消除边缘)。我不确定我需要使用哪种摆动工具来完成此操作。 (并且可以将其在WPF做,我有什么工具来使用该)如何在java swing GUI中创建可移动的节点和边缘?
如果你想“推出自己的”解决方案,我有几个建议:
- 显然,你需要使用MouseListener和MouseMotionListener,它们可以通过使用MouseAdapter组合成一个实体。
- 您的线条可能会绘制在JPanel的paintComponent方法中。
- 然后你对节点的选择就会发生变化。您可以使用组件(如JLabels),每个组件都附带一个MouseAdapter(同时作为MouseListener和MouseMotionListener),或者您可以使用单个MouseAdapter添加到JPanel,并再次在JPanel的
paintComponent(...)
方法中将节点呈现为矩形。 - 节点和连接的数据应与GUI分开保存,可能在其自己的“模型”类中作为MVC(模型 - 视图 - 控制器)应用程序的一部分。
- MouseAdapter将成为MVC结构的“控件”的一部分,并会改变模型。
- 我更喜欢能够将监听器添加到我的模型中,例如PropertyChangeListener,并且让视图Swing GUI根据其侦听器被触发来激发其显示更改。
因为这可能是家庭作业,所以我会留给你解决细节和代码问题,但如果你被困在特定的步骤中,随时可以随身携带你的代码。
针对MVC的+1。['GraphPanel'](https://sites.google.com/site/drjohnbmatthews/graphpanel)是一个演示一些基本技巧的例子。 – trashgod 2012-07-27 18:22:10
试试这个
<dependency>
<groupId>jgraph</groupId>
<artifactId>jgraph</artifactId>
<version>5.13.0.0</version>
</dependency>
我们真的创造了十分复杂摆动UI屏幕采用了大量的曲线结构导向与此库。看看这里http://www.jgraph.com或直接在这里http://www.jgraph.com/images/business-large.png这是你在找什么?
一般问题:我可以使用html5和JS为我的桌面Java应用程序构建gui。如果是的话,我需要什么工具? – Ramy 2012-08-02 01:43:44
我建议你试试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));
}
和对象图表由:
这功课是?你到目前为止获得了哪些代码? – Reimeus 2012-07-27 16:42:59
是的,这是我的学校项目,我还没有开始任何编码。 – Ramy 2012-07-27 17:55:09