我正在製作一個程序,輸出兩位藝術家之間的最短路徑(以其整數ID已知)。開始和結束是兩位藝術家使用的輸入。我正在創建一個帶有運行按鈕和標籤的GUI。當按下按鈕時,程序應計算最短路徑,然後以字符串的形式返回並設置爲GUI的標籤。最短路徑看起來像這樣5 73 19 100,其中每個整數是藝術家的ID,5是開始藝術家,100是最終藝術家。Java GUI功能 - 子類問題?
我最短路徑的代碼(function()中的代碼)在我把它放在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;
}
讓我知道是否有其他代碼段將是有用的。
我想知道我們是否沒有足夠的信息來對問題進行有根據的猜測。 – 2012-03-10 21:29:39
我認爲這可能與Listener中的字段引用有關。正如@HovercraftFullOfEels所說,獲得更多信息將會帶來巨大好處。 – 2012-03-10 21:29:59
我不認爲問題出在DijkstrasAlgorithm類上,因爲你的代碼在沒有GUI的情況下工作。不,我認爲問題出在GUI上,以及如何從中獲取信息(可能)。 – 2012-03-10 21:58:04