一个用Dijkstra算法实现的路由算法的java程序——5 GraphShow类

该博客展示了Java代码实现地图路由路径长度显示的功能。通过GraphShow类控制地图显示,与主窗口建立联系。包含地图显示窗口、显示路径长度按钮等组件,还实现了与主程序的通信接口,可动态设置城市名称、路径长度等信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.awt.*;
import javax.swing.*;

import java.awt.event.*;

/**
 * GraphShow通过控制地图的显示以及和主窗口的联系来充当地图显示与主窗口的桥梁。
 * @author Fe
 */
public class GraphShow {
 GraphFromFile graph = null;
 /**
  * 容纳地图显示的Dialog。
  */
 JDialog graphContainer;
 /**
  * 一张画布。在这张画布上具体画图像。画布添加到地图显示窗口中。
  */
 MapCanvas mapCanvas = null;
 /**
  * 显示目前两届滇间路径长度的按钮。按下此按钮将弹出显示路径长度的信息框。
  */
 static JButton showLength = new JButton("路由路径长度");
 /**
  * 用于关闭地图显示窗口。
  */
 JButton ok = new JButton("确定");
 /**
  * 说明目前地图显示的信息的一条Label。通过程序的协调动态的显示目前的信息。
  */
 static JLabel mapInfo = new JLabel("<html><font Size=6 Color=gray>" + "完整的路由节点地图" + "</font></html>");
 
 public GraphShow() {

 }
 
 /**
  * 在初始化构造其中完成地图显示窗口的基本显示控制。
  * @param owner
  * 主程序窗口
  */
 public GraphShow(JFrame owner, GraphFromFile g) {
  graph = g;
  mapCanvas = new MapCanvas(graph);
  
  graphContainer = new JDialog(owner, "RouterNodesShow", true);
  graphContainer.getContentPane().setLayout(new BorderLayout());
  
  graphContainer.getContentPane().add(mapCanvas, BorderLayout.CENTER);
  JPanel temp = new JPanel();
  temp.add(showLength);
  temp.add(ok);
  //用匿名内类实现使地图窗口不可见。
  ok.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    graphContainer.setVisible(false);
   }
  });
  graphContainer.getContentPane().add(temp, BorderLayout.SOUTH);
  JPanel temp1 = new JPanel();
  temp1.add(mapInfo);
  graphContainer.getContentPane().add(temp1, BorderLayout.NORTH);
  
  //为显示路径长度按钮添加监听器。
  AddAction action = new AddAction();
  
  //将显示路径长度按钮设置为默认按钮。
  graphContainer.getRootPane().setDefaultButton(showLength);
  
  graphContainer.setSize(680, 710);
  //得到屏幕的大小,即屏幕的分辨率。
  Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
  graphContainer.setLocation(d.width/2-340, d.height/2-370);
  graphContainer.setVisible(true);
  
  //此处我也没有搞清楚到底怎么回事。
  //反正如果没有这一句,显示路径长度的信息框的显示次数将随着对checkbox的点击次数的增加而增加。
  showLength.removeActionListener(action);
 }
 
 /**
  * 实现对showLength的动作添加。按下此按钮将弹出显示路径长度的信息框。
  * <p>
  * 之所以不用匿名内类来实现对showLength按钮的动作添加,是因为在程序中需要用到此内类的引用。
  * </p>
  * @author Fe
  */
 protected class AddAction implements ActionListener {
  public AddAction() {
   showLength.addActionListener(this);
  }
  public void actionPerformed(ActionEvent e) {
   String nodeID[] = graph.getNodeID();
   JOptionPane.showMessageDialog(graphContainer,
         "从" + nodeID[sourceID] + "到" + nodeID[targetID] + "的路由距离为" + distance + "。",
         "路由路径",
         JOptionPane.INFORMATION_MESSAGE);
  } 
 }
 
 /**
  * sourceID、targetID以及distance用于显示路径长度信息框时与主程序的通信。以实现动态地显示城市名称与路径长度。
  */
 static int sourceID = -1, targetID = -1, distance = -1;
 
 /**
  * 与主程序的通信接口。用于动态地设置城市名称与路径长度。
  * @param source
  * 起始城市结点
  * @param target
  * 目标城市结点
  * @param dist
  * 两城市之间的路由距离
  */
 public static void setLengthButtonInfo(int source, int target, int dist) {
  sourceID = source;
  targetID = target;
  distance = dist;
 }
 
 /**
  * 与主程序的通信接口。用于动态地控制路径长路按钮的enablity。
  * @param enable
  * 显示路径按钮是否可用。true为可用,false为不可用。
  */
 public static void setLengthButtonEnable(boolean enable) {
  showLength.setEnabled(enable);
 }
 
 /**
  * 与主程序的通信接口。用于动态地控制说明目前地图显示的信息的Label。
  * @param text
  * 地图上方显示的具体信息
  */
 public static void setLabelText(String text) {
  mapInfo.setText("<html><font Size=6 Color=gray>" + text + "</font></html>");
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值