Java GUI功能 - 子类问题?

时间:2012-03-10 21:24:33

标签: java swing user-interface

我正在研究一个输出两位艺术家之间最短路径的程序(以整数ID表示)。开始和结束是两位艺术家的使用输入。我正在创建一个带有运行按钮和标签的GUI。按下按钮时,程序应计算最短路径,然后将其作为字符串返回并设置为GUI的标签。最短路径看起来像这样的5 73 19 100,其中每个int是艺术家的ID,5是起始艺术家,100是最终艺术家。

当我把它放在main中时,我的最短路径代码(函数()中的代码)工作正常。但是,当我尝试组合使用我的GUI来运行它时,最终的字符串只包含第一个艺术家。看来我的da.run不再有用了吗?这是否与另一个类中的事实有关?

任何有关可能发生的事情的指示都将受到赞赏。以下是所有相关的GUI代码,因为我认为问题出在哪里

public class ShortestPath extends JFrame {

private static Map<Integer, Artist> artists = new HashMap<Integer, Artist>();
private static Artist start, end;
private static ArtistGraph map = new ArtistGraph(artists);
private static DijkstrasAlgorithm da = new DijkstrasAlgorithm(map);
private static Route r = new Route();

private static Connection connection;
private static Statement statement;

private Container contentPane;
private JPanel panel1, panel2;
private JButton button1;
private JLabel label1, label2, label3;
private JTextField field1, field2;

public ShortestPath() {
    //CODE FOR SETTING LABELS, PANELS, ETC REMOVED BECAUSE NOT RELEVANT FOR QUESTION
    button1.addActionListener(new Listener());
    panel1.add(button1);

    pack();
    setVisible(true);

}

private class Listener implements ActionListener
{
    public void actionPerformed(ActionEvent e)  
    {

        start = generateArtist(field1.getText());
        end = generateArtist(field2.getText());
        String done = function();


        label3.setText(done);


    }
}

 public static String function(){               
        ArtistGraph map = new ArtistGraph(artists);
        DijkstrasAlgorithm da = new DijkstrasAlgorithm(map);
        da.run(start, end);

        Route r = new Route();
        r.calculateRoute(end, da);

        for (int i = 0; i < r.getRoute().size(); i++) {
            int artist_id = r.getRoute().get(i).getID();
            System.out.println(artist_id);
        }

        String s = r.toString();

        return s;
    }

如果任何其他代码片段有用,请告诉我。

1 个答案:

答案 0 :(得分:1)

没有足够的信息来识别您发布的代码中的特定缺陷。展望未来,您可能需要查看Model–View–Controller模式,以便从视图中隔离您的模型(使用Dijkstra's algorithm搜索的图表) GUI显示)。我们讨论了一个例子here。由于搜索可能需要一些时间才能完成,请考虑使用SwingWorker,图示为here。它将允许搜索继续进行而不会阻止GUI event dispatch thread