0

我有一个ShortestPath包含 Dijkstra 算法的类和一个名为computeRoutes. 我还有一个带有搜索按钮的表单——我想computeRoutes从这个按钮调用该方法,但不知道该怎么做。

public class ShortestPath {
    public static void computeRoutes(Node source){

        source.minimumDistance = 0;
        PriorityQueue<Node> nodeQueue = new PriorityQueue<Node>();
        nodeQueue.add(source);

        while(!nodeQueue.isEmpty()){
            Node u = nodeQueue.poll();
            for(Edge e : u.neighbours){
                Node n = e.goal;
                int weight = e.weight;
                int distThruU = u.minimumDistance + weight;
                    if(distThruU < n.minimumDistance){
                        nodeQueue.remove(n);

                    n.minimumDistance = distThruU;
                    n.previousNode = u;
                    nodeQueue.add(n);
                }
            }
        }
    }

    public static List<Node> getShortestRouteTo(Node goal){
        List<Node> route = new ArrayList<Node>();
        for(Node node = goal; node != null; node = node.previousNode)
            route.add(node);
        Collections.reverse(route);
        return route;
    }
}

public class BPForm extends javax.swing.JFrame {
....
private void btnSearchActionPerformed(java.awt.event.ActionEvent evt) {
(I want to call the computeRoutes method here)
4

3 回答 3

3

在 netbeans 设计器中双击此按钮。它将为此按钮打开 ActionListener 的代码(如果您不知道这是什么。您应该查看按钮的事件处理)。只需在此处使用 ShortestPath 类的对象(您是否已创建对象?)调用 computeRoutes()。

于 2012-04-23T10:56:52.707 回答
2

我想你已经实现了 ActionListener,并且在代码中你必须覆盖

public void actionPerformed(ActionEvent e) {
   if (e.getSource() == computeRoutes) {
       // put the logic here 
   }
.....
}
于 2012-04-23T10:57:57.287 回答
-1

您只需要为按钮单击事件实现 OnClick 侦听器,然后只需调用您的方法

http://www.roseindia.net/java/example/java/awt/MouseClick.shtml

这是一个可以帮助您的示例

于 2012-04-23T10:58:08.253 回答