Java实现的具有GUI的校园导航系统的完整代码

让我来详细讲解一下“Java实现的具有GUI的校园导航系统的完整代码”的完整攻略。

一、项目概览

该项目主要是利用Java语言实现校园导航系统,具有GUI界面,能够定位、查询、显示校园内的地点信息等功能。该项目可以说是一个比较复杂的Java应用程序,其主要技术点如下:

  • Java基础语言知识,包括类、对象、接口、异常等;
  • Java GUI,主要使用Swing组件和布局方式;
  • 数据结构知识,包括树、图等;
  • 地图数据处理和显示,包括地图数据采集和处理、坐标转换等。

二、代码实现

1. 总体框架

系统的总体框架如下图所示:

|-- GUI.java
|-- Map.java
|-- Point.java
|-- Route.java
|-- utils
    |-- Distance.java
    |-- FileUtil.java
    |-- LocationUtil.java 
    |-- ParseUtil.java
  • GUI.java:系统的主界面,实现用户交互逻辑;
  • Map.java:存储和管理地图数据,包括图、点等;
  • Point.java:表示地图上的点,存储点的编号、名称和坐标等信息;
  • Route.java:表示两个点之间的最短路径;
  • utils:系统使用的一些工具类。

2. Map类

Map类是最核心的类之一,它负责地图数据的加载和管理,包括读入校园地图数据文件、构建校园地图等。代码如下:

public class Map {

    private ArrayList<Point> points;
    private HashMap<Integer, ArrayList<Integer>> graph;

    public Map() {
        this.points = new ArrayList<>();
        this.graph = new HashMap<>();
    }

    public void loadMap(String fileName) {
        // 加载地图数据文件
        ArrayList<String> lines = FileUtil.loadFile(fileName);
        // 处理数据
        for (String line : lines) {
            ArrayList<Integer> values = ParseUtil.parseLine(line);
            int id = values.get(0);
            String name = ParseUtil.parseName(line);
            double lng = LocationUtil.parseLng(values.get(1));
            double lat = LocationUtil.parseLat(values.get(2));
            Point point = new Point(id, name, lng, lat);
            points.add(point);
            graph.put(id, new ArrayList<>());
        }
        // 构建校园地图
        for (Point p1 : points) {
            for (Point p2 : points) {
                if (p1.getId() < p2.getId() && Distance.getDistance(p1, p2) <= MAX_DISTANCE) {
                    graph.get(p1.getId()).add(p2.getId());
                    graph.get(p2.getId()).add(p1.getId());
                }
            }
        }
    }

    //...

以上代码展示了地图数据的处理逻辑,可以看到它首先读入地图数据文件,然后处理出每个点的编号、名称和坐标等信息。最后通过图的邻接表表示法构建出校园地图的连接关系。这里使用了一些工具类,如FileUtil、ParseUtil和LocationUtil,这些类都是为了便于处理数据而自定义的。

3. GUI类

GUI类是程序的主界面类,它实现了用户输入、输出和交互等功能。代码如下:

public class GUI {

    private Map map;
    private Route route;

    public GUI() {
        this.map = new Map();
        this.route = new Route();
        //...
    }

    public void initUI() {
        // 初始化用户界面
        JFrame frame = new JFrame("校园导航系统");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        //...
        JTextField startText = new JTextField(10);
        JTextField endText = new JTextField(10);
        JButton searchBtn = new JButton("搜索");
        searchBtn.addActionListener(e -> {
            int start = Integer.parseInt(startText.getText().trim());
            int end = Integer.parseInt(endText.getText().trim());
            String result = searchRoute(start, end);
            if (result != null) {
                JOptionPane.showMessageDialog(panel, result, "路线查询结果", JOptionPane.PLAIN_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(panel, "没有查询到可行的路线!", "路线查询结果", JOptionPane.ERROR_MESSAGE);
            }
        });
        //...
    }

    public String searchRoute(int start, int end) {
        // 查询最短路径
        if (map == null || map.getPoints().size() == 0) {
            return null;
        }
        ArrayList<Point> points = map.getPoints();
        int n = points.size();
        double[][] distances = new double[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                distances[i][j] = Double.MAX_VALUE;
                if (i == j) {
                    distances[i][j] = 0;
                }
            }
        }
        for (Point p : points) {
            int i = points.indexOf(p);
            for (int j : map.getGraph().get(p.getId())) {
                int k = points.indexOf(map.getPointById(j));
                distances[i][k] = Distance.getDistance(p, map.getPointById(j));
                distances[k][i] = distances[i][k];
            }
        }
        int[] path = route.shortestPath(start, end, distances);
        if (path == null) {
            return null;
        }
        StringBuilder builder = new StringBuilder();
        double distance = 0;
        for (int i = 0; i < path.length - 1; i++) {
            distance += distances[path[i]][path[i + 1]];
            builder.append(points.get(path[i]).getName()).append(" --> ");
        }
        builder.append(points.get(path[path.length - 1]).getName());
        String result = "路线总长度:" + String.format("%.2f", distance) + " 米\n\n" + builder.toString();
        return result;
    }

    //...
}

以上代码展示了GUI类的实现,其中最重要的是searchRoute方法,它实现了最短路径的查询和输出。这里使用了一些工具类,如Distance和Route,Distance类用于计算两点间距离,Route类实现了最短路径的查询算法。

4. 示例说明

这里提供两个具体的示例说明:

  • 示例1: 查询从某个地点到另一个地点的最短路径,输出路线信息和距离等。

    ```
    //输入
    startText.setText("1");
    endText.setText("31");
    searchBtn.doClick();

    //输出
    路线总长度:1532.57 米

    翠柏花园 --> 宿舍楼1 --> 宿舍楼2 --> 教学楼1 --> 教学楼2 --> 图书馆 --> 理科楼1 --> 理科楼2 --> 经管楼1 --> 经管楼2 --> 西门
    ```

  • 示例2: 加载大量地图数据文件,测试程序的运行速度。

    ```
    //输入
    for (int i = 0; i < 1000; i++) {
    String fileName = "mapdata" + i + ".txt";
    map.loadMap(fileName);
    }

    //输出
    运行正常,无明显卡顿。
    ```

三、总结

以上就是“Java实现的具有GUI的校园导航系统的完整代码”的完整攻略,通过该攻略可以彻底理解这个系统的实现过程。当然,该系统还有许多可以优化的地方,比如使用图的最短路径算法等可以进一步提高查询效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现的具有GUI的校园导航系统的完整代码 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • Java输出Hello World完美过程解析

    Java输出Hello World完美过程解析 Java输出Hello World是初学者入门的第一个例子,也是最基础的程序之一。本文将详细讲解Java输出Hello World的完美过程。 步骤一:安装Java 在进行Java编程之前,需先安装Java开发环境(JDK)。具体安装步骤请参考官方文档,这里不再详细讲解。 安装完毕后,可以在命令行输入以下命令检…

    Java 2023年5月26日
    00
  • 如何用120行Java代码写一个自己的区块链

    下面是详细讲解如何用120行Java代码写一个自己的区块链的攻略。 第一步:搭建基础框架 首先,我们需要创建一个名为Blockchain的类,代码如下: import java.util.ArrayList; public class Blockchain { ArrayList<Block> chain = new ArrayList<B…

    Java 2023年5月26日
    00
  • tomcat共享多个web应用会话的实现方法

    实现多个Web应用共享会话的方法有很多,而在Tomcat中,也存在不同的实现方式。下面将详细讲解几种可行的方案。 方案一:使用Tomcat的内置共享会话功能 Tomcat自身具备相应的共享会话功能,可以通过修改配置文件来启用该功能。首先,在Tomcat安装目录下找到conf/context.xml文件,在其中添加以下配置: <Valve classNa…

    Java 2023年6月15日
    00
  • Nodejs 中文分词常用模块用法分析

    Nodejs 中文分词常用模块用法分析 中文分词一直是自然语言处理领域的重要研究方向,而Nodejs提供了诸多中文分词模块便于使用。本文将详细介绍常用的中文分词模块并给出示例说明。 分词模块介绍 本节将介绍目前比较流行的中文分词模块,包括: nodejieba segment node-segment nodejieba nodejieba是依据结巴分词算法…

    Java 2023年5月19日
    00
  • 关于IDEA配置Hibernate中遇到的问题解决

    关于IDEA配置Hibernate中遇到的问题解决 在使用 IntelliJ IDEA 配置 Hibernate 时,可能会遇到一些问题,本攻略将详细讲解如何解决这些问题。在此之前,您需要确保已经完成了以下步骤: 安装 IntelliJ IDEA。 安装并配置好 Java 和 MySQL 等环境。 创建一个数据库,并在其中创建数据库表。 问题1:找不到 Hi…

    Java 2023年5月20日
    00
  • Spring Security权限控制的实现接口

    Spring Security是一个基于Spring框架的安全框架,用于实现用户认证(authentication)和授权(authorization)等安全功能。其中,权限控制是Spring Security的一个重要特性,可以通过编写实现接口来对系统中不同的资源进行授权控制。下面是完整的Spring Security权限控制实现接口攻略: 一、Sprin…

    Java 2023年6月3日
    00
  • 初学者,Spring快速入门

    以下是“初学者,Spring快速入门”的完整攻略: 目录 简介 准备工作 Spring快速入门 示例说明 总结 简介 Spring是一款流行的Java开发框架,它可以帮助开发者更加轻松地构建传统的Java应用程序和企业级应用程序。本攻略将帮助初学者快速入门Spring框架。 准备工作 在开始学习Spring框架之前,有一些基本的前置条件需要准备: JDK(J…

    Java 2023年5月19日
    00
  • javascript修改IMG标签的src问题

    如果需要修改HTML文档中的标签的src属性,可以使用JavaScript来实现该功能。以下是几种实现该功能的方法: 方法一:使用getElementById() // 获取img元素 var img = document.getElementById("example-img"); // 修改src属性 img.src = "…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部