JavaFX 拓扑图实现指南

拓扑图是一种重要的图形表示方式,常用于网络、流程和关系的可视化。在本文中,我们将通过 JavaFX 实现一个简单的拓扑图。下面是整个实现的流程。

实现流程

步骤 描述
1 引入 JavaFX 依赖
2 创建 JavaFX 应用程序的主类
3 设置场景与绘制拓扑图
4 添加节点与边的可交互性
5 运行应用程序

步骤详细解析

1. 引入 JavaFX 依赖

确保项目中的 pom.xml(如果是 Maven 项目)包含 JavaFX 的依赖项。

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>17.0.1</version>
</dependency>

2. 创建 JavaFX 应用程序的主类

创建一个名为 TopologyApp 的主类,继承 Application 类。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

public class TopologyApp extends Application {
    @Override
    public void start(Stage primaryStage) {
        // 创建并设置场景
        Pane root = new Pane();
        Scene scene = new Scene(root, 600, 400);
        
        primaryStage.setTitle("拓扑图示例");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args); // 启动 JavaFX 应用程序
    }
}

3. 设置场景与绘制拓扑图

在主类中,我们在 Pane 中添加自定义的节点和边。

import javafx.scene.shape.Line;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;

public void drawTopology(Pane root) {
    // 创建节点
    Circle node1 = new Circle(100, 100, 20);
    node1.setFill(Color.RED);
    
    Circle node2 = new Circle(300, 100, 20);
    node2.setFill(Color.BLUE);
    
    // 创建边
    Line line = new Line(120, 100, 280, 100); // 从 node1 到 node2 的边

    // 添加节点和边到 Pane
    root.getChildren().addAll(node1, node2, line);
}

4. 添加节点与边的可交互性

让拓扑图中的节点能够响应鼠标事件。

import javafx.scene.input.MouseEvent;

node1.setOnMouseClicked(event -> handleNodeClick(event, node1));
node2.setOnMouseClicked(event -> handleNodeClick(event, node2));

private void handleNodeClick(MouseEvent event, Circle node) {
    // 处理节点点击的逻辑
    System.out.println("节点被点击: " + node);
}

5. 运行应用程序

start 方法中调用 drawTopology 方法以绘制拓扑图。

@Override
public void start(Stage primaryStage) {
    Pane root = new Pane();
    drawTopology(root); // 绘制拓扑图
    Scene scene = new Scene(root, 600, 400);
    primaryStage.setTitle("拓扑图示例");
    primaryStage.setScene(scene);
    primaryStage.show();
}

状态图和序列图

使用 Mermaid 语法,我们可以描述系统的状态和行为。

状态图

stateDiagram
    [*] --> 初始状态
    初始状态 --> 拓扑图准备
    拓扑图准备 --> 并列绘制节点
    并列绘制节点 --> 用户交互
    用户交互 --> [*]

序列图

sequenceDiagram
    participant User
    participant App
    User->>App: 启动应用程序
    App->>App: 绘制节点与边
    User->>App: 点击节点
    App-->>User: 处理点击事件

总结

通过以上步骤,我们成功地实现了一个简单的 JavaFX 拓扑图应用程序。我们设计了应用的结构、绘制了拓扑图并添加了交互功能。希望此指南能够帮助你了解如何使用 JavaFX 绘制拓扑图,并激励你深入探索 JavaFX 的更多功能和可能性。通过不断练习和尝试,你会对 JavaFX 有更深的理解,祝你开发愉快!