2

在我的 java 项目中,我需要创建一个带有 swing 的 GUI,我将在其中拥有一个类似空间的画布。用户应该能够单击并创建节点,然后将节点与边缘链接(就像您在 MS Visio 中创建 UML 图一样)。用户还应该能够随边移动节点。然后我的应用程序将保存网络并运行自私节点算法,用户应该能够在 GUI 上实时看到它(创建和消除边缘)。我不确定我需要使用哪些挥杆工具来完成这项工作。(并且可以在 WPF 中完成,我必须使用哪些工具)

4

3 回答 3

6

试试这个

<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这是你要找的东西吗?

于 2012-07-27T16:50:45.890 回答
4

如果您尝试“推出自己的”解决方案,我有一些建议:

  • 显然,您将需要使用 MouseListener 和 MouseMotionListener,它们可以通过使用 MouseAdapter 组合成一个实体。
  • 您的线条可能会在 JPanel 的 paintComponent 方法中绘制。
  • 然后你对节点的选择就会不同。您可以使用 JLabels 等组件,每个组件都附加一个 MouseAdapter(同样作为 MouseListener 和 MouseMotionListener)
  • 或者您可以使用添加到 JPanel 的单个 MouseAdapter 并在 JPanel 的paintComponent(...)方法中再次将节点呈现为矩形。
  • 节点和连接的数据应该与 GUI 分开保存,也许在它自己的“模型”类中,作为 MVC(模型-视图-控制器)应用程序的一部分。
  • MouseAdapter 将成为 MVC 结构的“控件”的一部分,并会更改模型。
  • 我更喜欢能够将侦听器添加到我的模型中,例如 PropertyChangeListener,并让视图 Swing GUI 根据触发的侦听器来改变其显示。

由于这可能是家庭作业,因此我将让您制定详细信息和代码,但如果您在特定步骤遇到困难,请随时返回您的代码。

于 2012-07-27T16:49:07.580 回答
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));
}

图中的对象表示为: 类层次结构

于 2012-07-27T16:55:37.660 回答