Функциональность Java GUI - проблемы подкласса? - PullRequest
0 голосов
/ 11 марта 2012

Я работаю над программой, которая выводит кратчайший путь между двумя художниками (известный их целочисленными идентификаторами).Начало и конец - используемые входные данные для двух художников.Я создаю графический интерфейс с кнопкой запуска и меткой.Когда кнопка нажата, программа должна рассчитать кратчайший путь, который затем возвращается в виде строки и устанавливается как метка GUI.Кратчайший путь будет выглядеть примерно следующим образом: 5 73 19 100, где каждый из интервалов является идентификатором артиста, а 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 Ответ

1 голос
/ 11 марта 2012

Недостаточно информации для определения определенного недостатка в коде, который вы опубликовали.В дальнейшем вы можете захотеть взглянуть на шаблон Модель – Вид – Контроллер , чтобы изолировать вашу модель (график, ищущийся с использованием алгоритма Дейкстры ) от view (дисплей с графическим интерфейсом).Пример обсуждается здесь .Поскольку поиск может занять некоторое время, рассмотрите возможность использования SwingWorker, здесь показано .Это позволит продолжить поиск, не блокируя поток обработки событий в графическом интерфейсе .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...